引用类型(类)的变量可以为空,而值类型(结构)的变量不能。
空类型是可以为空的值类型。
可空类型只需要在类型的后面添加“?”(它必须是结构)。
//x1是一个普通的int, x2是一个可以为空的int。
//因为x2是可以为空的int,所以可以把null分配给x2:
int x1 = 1;
int? x2 = null;
因为int值可以分配给int?,所以给int?传递一个int变量总是会成功,编译器会接受它:
int? x3 = x1;
//可空类型可以接受普通类型的传值,但普通类型接受可控类型要进行强制转化。
int x4 = (int)x3;
//如果x3是null,类型转换操作就会生成一个异常。
更好的方法是使用可空类型的HasValue和Value属性。
HasValue返回true或false,这取决于可空类型是否有值,Value返回底层的值。
int x5 = x3.HasValue ? x3.Value: -1;
合并操作符
//如果x3是null,则用变量x6给它设置-1,否则提取x3的值:
int x6 = x3 ??-1;