可空值类型
在值类型后面加?可以让这个值类型可以使用null值。
这个功能是的确地改变了类型,并不是注释。
可空值类型的运算
可空值类型的运算会先检测两者之间是否有null值。如果有null那么结果就是null。
如果双方都不是null,则按照他们类型自己定义的运算规则来计算。
int? a = null;
int b = 1;
Console.WriteLine(a + b == null);//true
Console.WriteLine(b - a == null);//true
a = 10;
Console.WriteLine(a + b == null);//false
Console.WriteLine(b - a == null);//false
但是关系运算例外,只要有一方是null,结果就会得到false。
当然,如果双方都是null,那么相等判断时会得出true。
如果为true,代表这个字符串有内容。如果字符串是null或“”,都会得到false。而且这个过程不会出错。
bool的可为空类型
但是可空bool类型除外。类似于逻辑运算中的短路。
进行与运算和或运算时,如果一方可以得出结果,则另一方是不是null无所谓。
bool? b = null;
Console.WriteLine(true|b);//true
Console.WriteLine(b|true);//true
Console.WriteLine(false&b);//false
Console.WriteLine(b&false);//false
bool可为空类型不能直接当作流程控制语句的条件。
还原值类型
将一个可空值类型还原成原本的类型,只需要通过类型转换表达式即可。
或者访问他的Value属性。
但在值为null时,这两种方法都会报错。
一个可空值类型,其实就是记录了两个属性,
一个bool值,表示是否为null。
一个是原本的值类型,表示记录的值。
空短路的内容访问
如果要访问可空值类型的内容,可以先转换为原类型获得。
但是如果使用空短路,则可以直接对内容进行访问。