2011-03-07 88 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 – 2011-03-07 17:54:35

+2

@Aim - 我是不太確定。我認爲接受的答案特別糟糕。 – ChaosPandion 2011-03-07 17:55:58

+0

對於你現有的問題,在另一個問題上解決這個問題是不好的。它使現有的答案無效,並且後面的整個帖子都會讓人感到困惑。 – 2011-03-07 19:15:50

回答

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 2011-03-07 20:21:50

+0

@thecoop謝謝。 – 2011-03-07 20:30:05

2

如果T是一個值類型,它不能爲空。要使值類型爲空,您必須使用結構體的 System.Nullable結構體。

相關問題