能夠爲 null 的類型是 System.Nullable<T> 結構的實例。 能夠爲 null 的類型可表示一個基礎類型的全部值 T
,還能夠再表示一個 null 值。 基礎類型 T
能夠是任何不可爲 null 的值類型。 T
不能是引用類型。html
例如,能夠將 null
或任何整數值(從 Int32.MinValue 到 Int32.MaxValue)賦給 Nullable<int>
,並可將 truefalse 或 null
賦給Nullable<bool>
。數據庫
須要表示基礎類型的未定義的值時,請使用能夠爲 null 的類型。 布爾變量只能有兩個值:true 和 false。 沒有「未定義」的值。 在許多編程應用程序中,尤爲是數據庫交互中,變量值可能未定義或缺失。 例如,數據庫中的字段可能包含值 true 或 false,但它也可能根本不包含任何值。 這種狀況下要使用 Nullable<bool>
類型。express
能夠爲 null 的類型具備如下特徵:編程
能夠爲 null 的類型表示能夠向其賦與 null
值的值類型變量。 不能根據引用類型建立能夠爲 null 的類型 (引用類型已支持 null
值)。api
語法 T?
是 Nullable<T>
的簡寫。 這兩種形式是可互換的。ide
向能夠爲 null 的類型賦值的方法與向基礎值類型賦值的方法相同:int? x = 10;
或 double? d = 4.108;
。 還可賦予 null
值:int? x = null;
。測試
使用 Nullable<T>.HasValue 和 Nullable<T>.Value 只讀屬性可測試是否存在 null 值並檢索值,如如下示例所示:if (x.HasValue) y = x.Value;
ui
若是變量包含值,則 HasValue 屬性返回 true
;若是值爲 null
,則返回 false
。spa
若是 HasValue 返回 true
,則 Value 屬性返回值。 不然會引起 InvalidOperationException。code
還可將 ==
和 !=
運算符用於能夠爲 null 的類型,如如下示例所示:if (x != null) y = x.Value;
若是 a
和 b
均爲 null,則 a == b
的計算結果爲 true
。
從 C# 7.0 開始,能夠使用模式匹配來檢查和獲取能夠爲 null 的類型的值:if (x is int valueOfX) y = valueOfX;
。
T?
的默認值是一個實例,其 HasValue 屬性返回 false
。
使用 GetValueOrDefault() 方法可返回賦予的值,若是能夠爲 null 的類型的值爲 null
,它還可返回基礎值類型的默認值。
使用 GetValueOrDefault(T) 方法可返回賦予的值,若是能夠爲 null 的類型的值爲 null
,它還可返回提供的默認值。
使用 null 合併運算符 ??
,基於能夠爲 null 的類型的值向基礎類型賦值:int? x = null; int y = x ?? -1;
。 在示例中,因爲 x
爲 null,因此 y
的結果值爲 -1
。
若是定義了(用戶定義的)兩種數據類型之間的轉換,還可將同一轉換用於這些數據類型的可爲 null 的版本。
不得嵌套能夠爲 null 的類型。 不會編譯下面的一行代碼:Nullable<Nullable<int>> n;
有關詳細信息,請參閱使用能夠爲 null 的類型,以及如何:標識能夠爲 null 的類型主題。