Nullable
是一個類型,而不是一個類型的屬性。 System.String
可以爲空,但它不是Nullable
,與int?
不同,它是Nullable<System.Int32>
的快捷鍵。 C#中的所有引用類型都可以爲空(可以傳遞空引用),而Nullable
類型只能接受不可爲空的值類型作爲參數。
如果你想檢查一個給定類型可以接受null
作爲一個值,你可以做這樣的事情:
bool CanBeNull<T>()
{
return default(T) == null;
}
當然,這已經使得假設默認值是空值,這不一定是這種情況;但它適用於兩種參考類型和Nullable
值類型。如果您必須處理接受空值但不作爲默認值的值類型,則必須專門添加它。沒有真正的確定和簡單的方法來檢查給定的類型是否可以被賦值爲null,而不是實際嘗試賦值爲空值。
事實上,什麼「可以分配null」的意思是非常依賴於編譯器的東西。例如,像int? someValue = null;
這樣的操作實際上調用了int?
的構造函數 - 它相當於int? someValue = new int?();
。
如果你不知道在編譯時的類型(所以你不能使用泛型),你可以添加一個檢查給定類型是否是值類型:
if (!type.IsValueType) // Can be assigned null
確保你正確地對待類,值類型和接口。當然,只要能夠將一個null
值分配給本地/字段並不意味着它必然是一個有效的值。最後,這個決定是你的。
您是否嘗試閱讀答案和所有代碼,而不是複製看起來相關的代碼行? 'Nullable.GetUnderlyingType()'只適用於值類型。 – CodeCaster
一個對象總是可以爲空的,因爲它是一個參考值 –