可空型別
可空型別可以表示基礎型別的所有值以及 null
。
語法 T?
是 Nullable<T>
的簡寫
可以為 Nullable 的值實際上是 System.ValueType
物件,因此它們可以裝箱和取消裝箱。此外,可空物件的 null
值與參考物件的 null
值不同,它只是一個標誌。
當可空的物件裝箱時,空值被轉換為 null
引用,並且非空值被轉換為非可空的底層型別。
DateTime? dt = null;
var o = (object)dt;
var result = (o == null); // is true
DateTime? dt = new DateTime(2015, 12, 11);
var o = (object)dt;
var dt2 = (DateTime)dt; // correct cause o contains DateTime value
第二條規則導致了正確但矛盾的程式碼:
DateTime? dt = new DateTime(2015, 12, 11);
var o = (object)dt;
var type = o.GetType(); // is DateTime, not Nullable<DateTime>
簡短形式:
DateTime? dt = new DateTime(2015, 12, 11);
var type = dt.GetType(); // is DateTime, not Nullable<DateTime>