4.3.4 Nullable类型
一个Nullable类型就是基本类型加上一个“是否为null指示器”的合成类型。对于一个类型,如果既可以给它分配一个值,也可以给它分配null引用(表示没有任何值),我们就说这个类型是可空的。因此,可空类型可表示一个值,或表示不存在任何值。例如,类似String的引用类型就是可空类型,而类似Int32的值类型不是可空类型。由于值类型的容量只够表示适合于该类型的值,因此它不可为空。
那么该如何理解呢?有些人认为int型变量的值0就表示空,这是不对的,0也是它的值,而并不表示空。
我们看看代码清单4-11所示的代码。
代码清单4-11 Nullable类型用法
1 using System;
2
3 namespace ProgrammingCSharp4
4{
5 class Program
6{
7 static void Main(string[]args)
8{
9 int?oneValue=null;
10//oneValue=10;
11 if(oneValue.HasValue)
12{
13 Console.WriteLine(oneValue.Value);
14}
15 else
16{
17 Console.WriteLine(“oneValue的值为null!”);
18}
19}
20}
21}
第9行定义的Nullable类型和定义一个非Nullable类型非常类似,不同之处在于类型后的类型修饰符“?”。
另外,这里我们为oneValue变量赋予了初始值null,这也是不同于非Nullable类型的地方。
第11行中Nullable类型的HasValue属性用来判断是否有值存储,如果为true则表示有值,即不为null;为false则表示没有值,此时如果尝试获得变量的值时会产生一个异常:
System.InvalidOperationException:可为空的对象必须具有一个值。
第13行中Nullable类型的Value属性存储赋予变量的值。
请大家先运行代码清单4-9,然后再将第10行前的注释符号“//”去掉再运行,对比两次运行的结果。