2013-04-29 78 views
4

我知道如何直接检查一个字段的类型。 但我怎么能实现这样的如何检查循环中的类型?

private bool checkJumpObstacle(Type type) 
    { 
     foreach (GameObject3D go in GameItems) 
     { 
      if (go is type) // won't accept 'type' 
      { 
       return true; 
      } 
     } 
     return false; 
    } 

对于类型,我想通过CarHouseHuman作为参数(这些都是类)。 但这种代码不起作用。

回答

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())); 
} 

显然,如果你不希望任何空值,你可以摆脱无效性检查。

+0

太棒了!谢谢 – 2013-04-29 14:55:19

+0

哦乔恩......... – 2013-04-29 14:57:18

+0

乔恩,这个怎么样? 'if(type.GetType()== go.GetType()。BaseType)' – 2013-04-29 15:05:36