要檢查是否值類型爲空目前我在做這樣的事情:尋找一個更優雅的方式來檢查空值類型
int? i = null;
bool isNullable = i.GetType().ToString().Contains("System.Nullable");
有沒有更優雅的方式來做到這一點?
要檢查是否值類型爲空目前我在做這樣的事情:尋找一個更優雅的方式來檢查空值類型
int? i = null;
bool isNullable = i.GetType().ToString().Contains("System.Nullable");
有沒有更優雅的方式來做到這一點?
您可以使用Nullable.GetUnderlyingType(Type)
- 將返回null
如果它不是可空類型入手,或基礎值類型,否則:
if (Nullable.GetUnderlyingType(t) != null)
{
// Yup, t is a nullable value type
}
注意,這裏使用了Nullable
靜態類,而不是Nullable<T>
結構體。
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
{
// it is a nullable type
}
這是微軟如何建議你Identify Nullable Types
哇 - 對於微軟來說,這是一個奇怪的建議,因爲有一個內置的方法來做到這一點。 (看我的回答。) – 2010-07-08 17:04:53
是的,它似乎有點更長的囉嗦。看着你的,它是否會返回null,如果它不是一個可爲空的類型,並且儘管你可以用它來檢查一個類型是否可以爲null,但它並非嚴格意義上的目的? (雖然它更快!) – w69rdy 2010-07-08 17:09:00
@ w69wrdy:它提供了比您需要的更多信息 - 但它以更簡單的方式爲您提供*所需的所有信息。在可空類型的情況下,它的效率非常低*,因爲它也會得到泛型類型的參數......但是我會在任何一天爲了可讀性和簡單性而去做。 – 2010-07-08 17:11:09
int? i;
bool isNullable = i is Nullable;
編輯:沒關係,這是行不通的。
你試過這個嗎? – 2010-07-08 17:03:51
這看起來沒有用,我得到這個編譯器警告: 給定的表達式從來沒有提供('System.Nullable')類型 – RobSullivan 2010-07-08 17:06:37
@RobSullivan:是的,它檢查與System.Nullable靜態類的兼容性。 ..這是永遠不會工作。我一直假設你有一個'類型'btw實例 - 如果你有一個*實際變量*具體類型,那麼你已經知道結果... – 2010-07-08 17:11:58
+1 Id可能會與這一個,因爲它更清潔,再加上查看反射器,這也檢查,以確保該類型不是一個泛型類型定義。 – SwDevMan81 2010-07-08 17:10:40