前言:System.Nullable<T>在FCL中的實現:
System.Nullable<T> where T:struct,所以Nullable<T>是一個值類型
有兩個只讀屬性HasValue和Value,以及GetValueOrDefault方法
18.1
C#語法:Int32? 等價於 Nullable<Int32>,於是可以有:
Int32? a = 5; Int32? b = null;
允許類型轉換:Int32 c = (Int32)a;
允許 可空基元類型之間的類型轉型:
Double? d = 5; Double? e = b;
允許對可空類型實例使用操作符。
18.2
??,空接合操作符,用法Int32 c = a ?? b; 表示如果a不為null就返回a;否則返回b
18.3
對Nullable<T>裝箱,要麼返回null,要麼返回已經裝箱的T
對已經裝箱的T拆箱,或者為T,或者為Nullable<T>。對於後者,CLR要分配內存,以容納 Nullable<T>的hasValue和Value字段
一個Nullable<T>對象,GetType()返回的類型是T,而不是Nullable<T>
通過可空值類型調用接口方法:
Int32? n = 5; Int32 result = ((IComparable)n).CompareTo(5);
這裡,n是Nullable<T>類型,Nullable<Int32>並未實現IComparable<Int32>,但 是C#中會先將隱式轉換為Int32,因為Int32實現了IComparable<Int32>接口,所以以上代碼可以編 譯。