2013-08-15 2 views
2

형식간에 암시 적 변환을 사용할 수 있는지 확인해야합니다. 내장 유형의 경우, 사용 가능한 유형 및 유형의 목록으로 사전을 작성할 수 있습니다. 그러나 사용자 지정 형식의 경우이 코드가 어떤 코드인지 검사 할 수 없으므로 불가능합니다. 이 작업을 수행 할 수있는 일반적인 방법이 있습니까?암시 적 변환을 유형간에 사용할 수 있는지 확인하는 방법은 무엇입니까?

감사합니다.

+0

가능한 중복 [? 암시 적 또는 명시 적 캐스트가 존재하는지 확인하는 방법 (HTTP "op_Implicit"이름으로 그것을 발견 할 것이다 .com/questions/1815452/암시 적 또는 암시 적 캐스팅 존재 여부 확인) – nawfal

답변

6

시도해보십시오. // 유래 : 사용자 정의 유형에 대한 암시 적 대화를위한 방법을 정의하는 경우

foreach (MethodInfo mi in typeof(CustomType).GetMethods()) 
     { 
      if (mi.Name == "op_Implicit") 
      { 
       Console.WriteLine(mi.ReturnType.Name); 
      } 
     } 
+2

* inbuilt * 유형에는 연산자가 포함되지 않는 경우가 종종 있습니다. 이러한 변환은 IL 수준에서 수행됩니다. 따라서 이것이 응답의 일부 * 인 반면, 일부 변환은 일반적으로 하드 코딩되어야합니다. –

+0

이 코드는 inbuilt 유형에 대한 정의가 잘 작동합니다. 대단히 감사합니다! – Krzysztof

+0

감사합니다. 그러나, 반영없이 이것을 할 수있는 방법이 있습니까? – krimog

-1

IsAssignableFrom을 사용해 보셨습니까?

Type type = typeof(MyClass); 
type.IsAssignableFrom(typeof(MyOtherClass)); 
+2

암시 적 변환에는 작동하지 않는 것으로 보입니다. 첫 번째 답변 (http://stackoverflow.com/questions/2119441/check-if-types-are-castable-subclasses)도 참조하십시오. –

+0

잘못된 것입니다! long은 short,'long x = new short();'에서 할당 가능하지만'typeof (long) .IsAssignableFrom (typeof (short))'는 False를 반환합니다! –

관련 문제