我知道如何直接检查某个字段的类型。 但我怎么能实现这样的东西
private bool checkJumpObstacle(Type type)
{
foreach (GameObject3D go in GameItems)
{
if (go is type) // won't accept 'type'
{
return true;
}
}
return false;
}
对于类型,我想将Car
,House
或Human
作为参数传递(这些都是类)。
但是这种代码不起作用。
答案 0 :(得分:16)
编辑:如果你不能使它成为通用方法,使用Type.IsInstanceOfType
实际上更容易:
private bool CheckJumpObstacle(Type type)
{
return GameItems.Any(x =>type.IsInstanceOfType(x));
}
听起来你可能想要Type.IsAssignableFrom
if (go != null && type.IsAssignableFrom(go.GetType());
请注意,这是假设希望继承的类型匹配。
此外,如果可能的话,请使用泛型。除了其他任何东西,这将使该方法非常简单:
private bool CheckJumpObstacle<T>()
{
return GameItems.OfType<T>().Any();
}
即使没有它,您仍然可以使用LINQ来简化:
private bool CheckJumpObstacle(Type type)
{
return GameItems.Any(x => x != null && type.IsAssignableFrom(x.GetType()));
}
显然,如果你不期望任何空值,你可以摆脱无效检查。