System.Nullable<T> 受限於 where T : struct,因此它本身是一個值類型。它擁有兩個唯讀屬性 HasValue 和 Value,以及 GetValueOrDefault() 方法。
在 C# 中,Int32? 是 Nullable<Int32> 的簡寫,使得以下寫法成為可能:
Int32? a = 5; Int32? b = null;
允許從可空類型向非可空類型進行顯式轉換:
Int32 c = (Int32)a;
也支援可空基元類型之間的轉換:
Double? d = 5; Double? e = b;
此外,可直接對可空類型實例使用運算符。
?? 運算符用法:Int32 c = a ?? b; 表示若 a 不為 null 則返回 a,否則返回 b。
Nullable<T> 裝箱:要麼返回 null,要麼返回已裝箱的 T。T 拆箱:目標可以是 T 或 Nullable<T>。若為後者,CLR 會分配記憶體以容納 Nullable<T> 的 hasValue 和 Value 欄位。Nullable<T> 物件呼叫 GetType(),返回的類型是 T 而非 Nullable<T>。透過可空值類型調用介面方法時,C# 會先隱式轉換為底層類型:
Int32? n = 5; Int32 result = ((IComparable)n).CompareTo(5);
此處 n 是 Nullable<Int32>,雖然它未實作 IComparable<Int32>,但 C# 會將其隱式轉換為 Int32,後者實作了該介面,故程式碼可編譯通過。