如果型別可以指派值或 Null 參照 (即 Visual Basic 中的 Nothing) (表示型別沒有任何值),則這個型別稱為可為 null。因此,可為 null 的型別 (Nullable Type) 可以表示值,或表示值不存在。例如,參考型別 (如 String) 可為 null,而實值型別 (如 Int32) 則否。因為實值型別只有表示該型別適當值的足夠容量,並沒有表示 null 值所需的額外容量,所以不可為 null。
Nullable 結構只支援使用實值型別做為可為 null 的型別,因為參考型別在設計上是可為 null 的。
Nullable 類別為 Nullable 結構提供了互補支援。Nullable 類別支援取得可為 null 的型別之基礎型別,以及在可為 null 的型別 (其基礎實值型別並不支援泛型比較和相等作業) 之配對上的比較和相等作業。
案例
視情況而定,您可以使用可為 null 的型別表示存在或不存在的內容。例如,HTML 標記的選擇性屬性可能存在於某個標記,但不存在於其他標記;資料庫資料表的可為 null 資料行可能存在於資料表的某個資料列,但不存在於其他資料列。
您可以將屬性或資料行表示為類別中的欄位,然後將欄位定義為實值型別。此欄位可以包含屬性或資料行的所有有效值,但不可含有表示屬性或資料行不存在的其他值。在這個狀況下,您可以將欄位定義為可為 null 的型別,取代實值型別。
主要資料屬性
Boxing 和 Unboxing
當可為 null 的型別為 boxed,Common Language Runtime 就會自動 Box Nullable 物件的基礎值,而非 Nullable 物件本身。也就是說,如果 HasValue 屬性為 true,Value 屬性的內容即為 boxed。如果 HasValue 屬性為 false,則會 Box Null 參照 (即 Visual Basic 中的 Nothing)。當可為 null 的型別之基礎值為 unboxed,Common Language Runtime 就會建立初始化為基礎值的新 Nullable 結構。