나는 다음과 같은 몇 가지 검사를 할 필요가 있습니다클래스가 C#에서 변수로 주어진 유형의 인스턴스인지 여부를 확인하는 방법은 무엇입니까?
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 프로젝트이므로 비슷한 항목 (예 : thisInstance.GetType(). GetType())에 대해 추가 GetType()을 호출하면 결과는 항상 System.MonoType이고, 이 경우 IsInstanceOfType은 항상 true를 반환하지만 물론 유용하지 않습니다.
비교가 실패한 이유나 어떻게 작동 시키는가? 아니면 그냥 포기하고 필요할 때마다 "ThisInstance is ThatClass"를 사용하면됩니까?
원본 코드를 어떤 식 으로든 "깔끔하지 않은"것으로 간주하지 않습니다. 그것은 매우 직설적 인 것처럼 보입니다. 리플렉션을 사용하는 이유는 언어 연산자를 사용할 수있을 때입니다. 더 나은 질문은 "코드를 재구성하여" "수표"가 불필요 할 수 있습니까? "입니다. –
글쎄, 그 두 클래스와 함께, 그것은 특히 깔끔하지는 않지만, 덜 쉽게 구성 할 수 있고, 더 많은 클래스를 사용하면 내 견해에서 약간 깔끔하게 보일 것입니다. – Jeffed
물론, 그렇지만 질문은 다음과 같습니다. 어떤 유형의 런타임 검사를 많이해야하는 이유는 무엇입니까? 런타임 검사로 인해 발생하는 비효율적 인 코드를 작성하려고 시도하지 말고 대신 완전히 제거하십시오. –