c# - 如何检查类 "is"是否是 C# 中作为变量给出的类型的实例?

标签 c# unity3d types superclass

我需要像这样进行一些检查:

if(thisInstance is ThatClass || thisInstance is ThatOtherClass)

我实际上不需要做很多这样的事情,所以我可以像上面那样简单地写它,但我仍然更喜欢以更整洁的方式来做,例如。像这样:

Type[] arrayOfClasses = new Type[] { typeof(ThatClass), typeof(ThatOtherClass))}
if(isOfAnyType(thisInstance, arrayOfClasses))

但由于某种原因我无法让它工作。出于某种原因,即使

的字符串表示
thisInstance.GetType()

typeof(ThatClass)

会是一样的,

thisInstance.GetType().IsInstanceOfType(type)

仍将始终导致 false。

万一它有所不同,这是一个 Unity 项目,因此如果为可比较的项目(例如 thisInstance.GetType().GetType())调用一个进一步的 GetType(),结果总是 System.MonoType,在在这种情况下,IsInstanceOfType 总是返回 true,这当然也没有用。

对比较失败的原因或如何使其起作用有任何想法吗?还是我应该放弃并在需要的地方简单地使用“thisInstance is ThatClass”?

最佳答案

你可以使用这样的东西。该方法检查通用对象是否属于数组中的任何类型并返回 bool 值。

    public static bool IsOfAnyType<T>(T obj, Type[] types)
    {
        bool isOfAnyType = false;

        for (int i = 0; i < classes.Length; i++)
        {
            if (types[i].IsAssignableFrom (obj.GetType()))
            {
                isOfAnyType = true;
                break;
            }
        }
         return isOfAnyType;
      }     

关于c# - 如何检查类 "is"是否是 C# 中作为变量给出的类型的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38043471/

相关文章:

c# - 带有 Nullable<T> 的 '==' 的参数顺序

android - 安装 FirebaseAuth.unitypackage 时出错,Gradle 无法获取依赖项

c# - 无法验证装配数据;加载此程序集时必须提供授权 key

c# - 在 Unity 中,如何将值从一个脚本传递到另一个脚本?

Scala 类型参数不符合类型参数范围

c# - TransactionScope 是否支持原子数据库执行?

c# - 具有事件的复合 WPF GUI 界面

javascript - 在 ASPX 中调用 javascript 的 ASCX 结果

haskell - <- 是否隐式强制 Haskell do block 中的类型?

java - Hashmap 持有不同的数据类型作为值,例如 Integer、String 和 Object