2013-04-29 94 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