2010-07-08 32 views

回答

14

您可以使用Nullable.GetUnderlyingType(Type) - 將返回null如果它不是可空類型入手,或基礎值類型,否則:

if (Nullable.GetUnderlyingType(t) != null) 
{ 
    // Yup, t is a nullable value type 
} 

注意,這裏使用了Nullable靜態類,而不是Nullable<T>結構體。

+0

+1 Id可能會與這一個,因爲它更清潔,再加上查看反射器,這也檢查,以確保該類型不是一個泛型類型定義。 – SwDevMan81 2010-07-08 17:10:40

7
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) 
{ 
    // it is a nullable type 
} 

這是微軟如何建議你Identify Nullable Types

+1

哇 - 對於微軟來說,這是一個奇怪的建議,因爲有一個內置的方法來做到這一點。 (看我的回答。) – 2010-07-08 17:04:53

+0

是的,它似乎有點更長的囉嗦。看着你的,它是否會返回null,如果它不是一個可爲空的類型,並且儘管你可以用它來檢查一個類型是否可以爲null,但它並非嚴格意義上的目的? (雖然它更快!) – w69rdy 2010-07-08 17:09:00

+0

@ w69wrdy:它提供了比您需要的更多信息 - 但它以更簡單的方式爲您提供*所需的所有信息。在可空類型的情況下,它的效率非常低*,因爲它也會得到泛型類型的參數......但是我會在任何一天爲了可讀性和簡單性而去做。 – 2010-07-08 17:11:09

0
int? i; 
bool isNullable = i is Nullable; 

編輯:沒關係,這是行不通的。

+2

你試過這個嗎? – 2010-07-08 17:03:51

+0

這看起來沒有用,我得到這個編譯器警告: 給定的表達式從來沒有提供('System.Nullable')類型 – RobSullivan 2010-07-08 17:06:37

+1

@RobSullivan:是的,它檢查與System.Nullable靜態類的兼容性。 ..這是永遠不會工作。我一直假設你有一個'類型'btw實例 - 如果你有一個*實際變量*具體類型,那麼你已經知道結果... – 2010-07-08 17:11:58

相關問題