2013-04-29 2 views
4

필드 유형을 직접 확인하는 방법을 알고 있습니다. 하지만 타입에 대해,이루프에서 유형을 확인하는 방법은 무엇입니까?

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를 전달하고 싶습니다. 하지만 이런 종류의 코드는 작동하지 않습니다.

답변

16

편집 : 당신이 그것을 일반적인 방법을 할 수없는 경우 실제로 더 쉽게 Type.IsInstanceOfType을 사용하고 :

private bool CheckJumpObstacle(Type type) 
{ 
    return GameItems.Any(x =>type.IsInstanceOfType(x)); 
} 

그것은 당신이 아마 그 Type.IsAssignableFrom

if (go != null && type.IsAssignableFrom(go.GetType()); 

주를 원하는 같은 소리 당신이 을 상속받은 상속 된 유형을 원한다고 가정합니다.

가능한 한 제네릭을 사용하십시오. 이외에도 다른 어떤에서, 그 방법은 정말 간단 할 것 : 당신에 null을 기대하지 않는 경우 분명히

private bool CheckJumpObstacle(Type type) 
{ 
    return GameItems.Any(x => x != null && type.IsAssignableFrom(x.GetType())); 
} 

: 심지어 그없이

private bool CheckJumpObstacle<T>() 
{ 
    return GameItems.OfType<T>().Any(); 
} 

을, 당신은 여전히 ​​쉽게하기 위해 LINQ를 사용할 수 있습니다 값을 입력하면 무효 검사를 제거 할 수 있습니다.

+0

굉장! 감사합니다 –

+0

오 존 ......... –

+0

존, 이것에 대해서? 'if (type.GetType() == go.GetType(). BaseType)' –

관련 문제