今天写程序,突然看到这么一个类型Nullable,查查msdn,才知道这是个很有用的东西。
整理如下:
1. Nullable类型是一个结构:System.Nullable, 书写格式为:T?。T是Nullable的基础类型。T可以是包含struct在内的任何值类型;它不能是一个引用类型。
示例:
int? i = 10;
double? d1 = 3.14;
bool? flag = null;
char? letter = 'a';
int?[] arr = new int?[10];
2. Nullable类型的意思就是为原来的T增加一个格外的值:"null"。
示例:判断null int? x = 2; if (x != null) {...}
3. Nullable类型的两个非常有用的只读属性:HasValue和Value。
示例:if(x.HasValue){y=x.Value;}如果HasValue返回false,访问Value的操作将会引发一个InalidOperationException的异常。
4. 操作符:??。它的意思就是如果Nullable类型的实例的值为null,那么就给他一个非null的默认值。
示例:int? x = null; int y = x ?? -1;
这个操作也可用在多个Nullable类型上,
示例:
int? e = null;
int? f = null;
int g = e ?? f ?? -1;
5.如果我想把两个int类型对象加起来,同时也保留他们的null值,这样写就可以了:
int? x = 125;
int? y = 33;
int? z = x + y;
一个Nullable类型可以转换成常规类型,一种方法是类型转换,另一种是通过Value属性。
示例:
int? n = null;
int m2 = (int)n;
int m3 = n.Value;
当对Nullable类型做比较时,任一个Nullable类型的值为null,比较结果为false.因此,非常重要的一点是,不能因为当前比较的结果是false,就认为它的反方面是true.
示例:
int? num1 = 10;
int? num2 = null;
if (num1 >= num2){...}else{...}
注意:bool?类型
bool?类型包含三个值:true,false和null.因此,它们不能被用在if,for和while语句中,否则将会产生编译错误CS0266
不可以这样:
bool? b = null;
if (b) // Error CS0266.
{}
6.函数GetValueOrDefault 表示检索当前 Nullable 对象的值或默认值
共同进步!