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行前的注释符号“//”去掉再运行,对比两次运行的结果。