C#对可空类型的支持
Int32?等价于Nullable< Int32 > 不仅如此,C#在此基础上为可空实例上还允许执行类型转化:
Int32? a = 5;
Int32? b = null;
Int32 c = (Int32)a; //将可空类型的a强制转换成非可空类型
Double? d = 5; //将Int32类型的值5转型成double,这个时候的d = 5.0
Double ? e = b; //e是null
C#的空接合操作符
就是三元操作符的语法糖
Int32 x = b ?? 123 <=> x = b? b : 123;
可空值类型的装箱
CLR会对可空值的变量进行特殊的操作,比如当一个Nullable< Int32 >传值给Object的时候。其实Nullable< Int 32>只是理论上存在NULL值,但是本身或许并不为Null,这个时候CLR的特殊机制就会发生作用,如果为NUll值,CLR不会发生装箱,而是直接返回NUll值,如果不为NULL,这里我们假如它为5,那么返回的就不是Nullable< Int 32>而是已经装箱过的< Int 32>
可空值类型的拆箱
//创建已经拆箱的Int32
Object o = 5;
//把O拆箱成一个Nullable< Int 32>和一个< Int 32>
Int32? a = (Int32?)o;
int b = (int32) o;
//创建一个初始化为null的一个引用
o = null;