2011-03-07 4 views
3

유형 클래스 또는 구조체는 어떻게 점검합니까?클래스 또는 구조체가

protected T GetNullValue<T>(IDataReader reader, int ordinalId) 
    { 
     if (reader.IsDBNull(ordinalId)) 
     { 
      //if T is struct..... 
      //else if I is class 
     } 
     return (T)reader.GetValue(ordinalId); 
    } 
+0

이 답변은 도움이 될 것입니다 : http://stackoverflow.com/questions/2713900/how-to-determine-if-a-net-type-is-a-custom-struct –

+2

@Aim - I 'm 그렇게 확신하지 못합니다. 받아 들여진 대답은 내 의견으로는 특히 나쁩니다. – ChaosPandion

+0

그런 기존의 질문에 다른 질문을 붙이는 것은 나쁜 형태입니다. 그것은 기존 답변을 무효로 만들고 전체 게시물을 나중에 사람들에게 혼란스럽게 만듭니다. –

답변

7
if (default(T) is ValueType) 
    ... 

내가 순간에 가지고 올 수있는 가장 효율적인 것입니다.

3

개체에 대해 Type 클래스를 가져 와서 확인하십시오.

Type t = reader.GetValue(ordinalId).GetType(); 
if (t.IsValueType){ 
    //Struct 
} else { 
    //Class 
} 

나중에 동적으로 결과를 처리하려는 경우 코드에서 나중에 Type 개체를 사용할 것으로 생각됩니다.

+0

해당 코드는 컴파일되지 않습니다. 오브젝트 인스턴스에'typeof'를 사용할 수 없으므로 GetType()을 사용해야합니다. – thecoop

+0

@thecoop Thanks. –

2

T가 값 유형이면 null 일 수 없습니다. nullable 값 형식을 만들려면 System.Nullable 구조체를 사용해야합니다.

관련 문제