unity游戏引擎-如何检查类是否“是”c#中以变量形式给出的类型的实例
本文关键字:变量 实例 类型 何检查 引擎 游戏 是否 检查 unity | 更新日期: 2023-09-27 17:51:19
我需要做一些检查,像这样:
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项目,所以如果为可比项目调用一个进一步的GetType()(例如:thisInstance.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;
}
你可以使用isSubclass:
thisInstance.GetType().IsSubclassOf(typeof(ThatClass))
要获得您想要的工作方式,您可以使用以下方法:
public static bool IsOfAnyType(object obj, Type[] types)
{
return types.Any(type => type.IsInstanceOfType(obj));
}
如果你不能使用Linq,你可以这样写方法:
public static bool IsOfAnyType(object obj, Type[] types)
{
foreach (var type in types)
{
if (type.IsInstanceOfType(obj))
return true;
}
return false;
}
为了测试这一点,我使用以下代码:
Type[] typesToCheck = { typeof(ThatClass), typeof(ThatOtherClass) };
ThatClass input1 = new ThatClass();
ThatOtherClass input2 = new ThatOtherClass();
if (IsOfAnyType(input1, typesToCheck))
Console.WriteLine("Hello world from " + input1.GetType());
if (IsOfAnyType(input2, typesToCheck))
Console.WriteLine("Hello world from " + input2.GetType());