可空类型的来由
举个例子 在电子商务的程序中,如果有一个订单已经下单了,但是还没发货和收获,在描述订单的发货时间和收获时间该怎么表示?在C#中值类型是不能为null的,但是在数据库的设计的时候是允许数据库字段设置为null,这样程序就会和数据库的设计存在冲突。为了解决这一问题C# 2.0 中还引入了可空类型,可空类型也是值类型,只是可空类型是包括null的值类型。
可空类型的核心部分是System.Nullable<T>。Nullable<T>是个泛型类型,参数T有个值类型的约束。两个重要的属性 HasValue和Value,HasValue指出是否含有一个真正的值,Value表示这个值。
Nullable<T>的装箱和拆箱
Nullable<T>是值类型,将它转化成引用类型的时候就要装箱。如果没有值装箱为空引用,有值则装箱为成T的已装箱的值。
可空类型提供的语法糖
?修饰符
//它俩表示的同一个意思,int?编译后便是System.Nullable的形式 int? i = null; Nullable<int> t = null;
?? 修饰符
int? a = null; // 下面代码等价于: x=a.HasValue?a.Value:12; int x = a ?? 12;