2012-11-08 5 views
0

일부 형식 변환을하는 메서드가 있습니다. 형식이 전달 된 제네릭 형식과 동일한 경우 전체 프로세스를 진행하고 싶지 않습니다. 여기에 스 니펫이 있습니다.개체가 제네릭 형식과 동일 함

public static T ConvertTo<T>(this object @this) 
    { 
     if (typeof(T) == @this.GetType()) 
      return (T)@this; 
    } 

나는 이미이 유형의 T가 작동하고있는 것으로 확인하고 있지만 이것이 가장 좋은 방법일까요?

+1

오히려'is'보다 * 정확한 * 유형을 사용하고자하는 모든 이유를 작동 할 수 있습니다? –

+0

Jon이 아니지만 'dotnetnoob'인 경우 'is'구문을 사용할 수 있습니다. – dotnetnoob

+1

확인해야 할 또 다른 사항 : 참조 유형뿐만 아니라 값 유형에도 사용할 수 있습니까? 그렇지 않다면'where T : class' 제약은 삶을 더 간단하게 만들 수 있습니다. –

답변

2

IsInstaceOfType 방법과 is을 사용하여 유형을 확인할 수 있습니다.

public static T ConvertTo<T>(this object @this) 
{ 
    if (@this is T) 
     return (T)@this; 
    else 
     return default(T); 
} 
+2

에 대해서만 작동해야합니다. 왜 typeof (T) .IsInstanceOfType (@) 대신'@this is T'라고 말하지 않아도됩니다. –

+0

뭔가 다른 것이 틀림 없습니다. '@this is T'는 완벽하게 유효한 표현식입니다. (나는 방금 담배를 피우지 않았 음을 확인하기 위해 그것을 시험했다). –

0

이것은 또한

public static T ConvertTo<T>(this object @this) 
{ 
    return (T)System.Convert.ChangeType(@this, typeof(T)); 
} 
관련 문제