다음

2010-03-01 4 views
7

이 고려 유형 매개 변수의 유형을 찾기? 더 좋은 방법은다음

if("" is T) // String 
if(1 is T) // Int32 

있나요 :

나는 생각했다?

+0

이 질문은 '중복'보다 유용합니다. 다른 질문에는 답변의 내용에 영향을 미치는 추가 수하물이있는 반면,이 질문은이 한 가지만 묻고 있기 때문입니다. – DCShannon

답변

16

기능이 있습니까? typeof(T)?

+0

if (typeof (T) == Type.GetType ("String")) ??? –

+9

if (typeof (T) == typeof (String))가 더 빨라야합니다. – helium

5

typeof(T) 기능을 사용할 수 있습니까? 그래서

if(typeof(T) == typeof(string))가 // 뭔가를합니까, 문자열을 확인하기

5

당신은 제네릭 형식 매개 변수의 유형을 얻을해야하는 경우가 거의 확실 함수의 설계에 결함이다; 이것은 이고 반대쪽은 "generic"인입니다. 따라서 오버로드를 대신 사용하십시오.

이외의 경우 Unsliced는 이미 T 유형을 결정한 정확한 답을 제공합니다. 클래스는,이 강제로 : 예상 클래스가 같은 클래스 또는 인터페이스 또는 T는 일반 서명

T GetValue()에 easly 할 수있는 추상 클래스에서 파생 된 경우

+0

디버깅 용으로 필요합니다. –

+0

type 매개 변수가 typeof (T) .IsValueType과 같은 값 유형인지 여부를 판별하는 데 사용할 수 있습니다. – LoBo

+0

@LoBo 물론 OP가 묻는 것이 아니라 * 대부분의 (그러나 전부는 아니지만) 목적을 위해 런타임에서 확인하는 대신 제약 조건을 사용합니다. –

2

실제로 그 일을 2 가지 방법이 있습니다 전체 T 유형은 참조 유형이됩니다. 또는 T GetValue() 여기서 T : IDisposable, 전체 T 유형이 IDisposable을 구현하도록합니다.

귀하의 경우 typeof (T)는 문제를 해결할 수 있지만이 경우 해당 방법을 일반화하지 마십시오.

관련 문제