[你必须知道的.NET]第二十一回:认识全面的null
[2] [你必须知道的.NET]第二十一回:认识全面的null
[3] [你必须知道的.NET]第二十一回:认识全面的null
[4] [你必须知道的.NET]第二十一回:认识全面的null
[5] [你必须知道的.NET]第二十一回:认识全面的null
系列文章导航:
[你必须知道的.NET] 第四回:后来居上:class和struct
[你必须知道的.NET] 第五回:深入浅出关键字---把new说透
[你必须知道的.NET] 第六回:深入浅出关键字---base和this
[你必须知道的.NET] 第七回:品味类型---从通用类型系统开始
[你必须知道的.NET] 第八回:品味类型---值类型与引用类型(上)-内存有理
[你必须知道的.NET] 第九回:品味类型---值类型与引用类型(中)-规则无边
[你必须知道的.NET] 第十回:品味类型---值类型与引用类型(下)-应用征途
[你必须知道的.NET] 第十一回:参数之惑---传递的艺术(上)
[你必须知道的.NET] 第十二回:参数之惑---传递的艺术(下)
[你必须知道的.NET] 第十三回:从Hello, world开始认识IL
[你必须知道的.NET] 第十四回:认识IL代码---从开始到现在
[你必须知道的.NET] 第十六回:深入浅出关键字---using全接触
[你必须知道的.NET]第二十二回:字符串驻留(上)---带着问题思考
[你必须知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二
3 ??运算符
在实际的程序开发中,为了有效避免发生异常情况,进行null判定是经常发生的事情,例如对于任意对象执行ToString()操作,都应该进行必要的null检查,以免发生不必要的异常提示,我们常常是这样实现的:
object obj = new object();
string objName = string.Empty;
if (obj != null)
{
objName = obj.ToString();
}
Console.WriteLine(objName);
然而这种实现实在是令人作呕,满篇的if语句总是让人看着浑身不适,那么还有更好的实现方式吗,我们可以尝试(? :)三元运算符:
object obj = new object();
string objName = obj == null ? string.Empty : obj.ToString();
Console.WriteLine(objName);
上述obj可以代表任意的自定义类型对象,你可以通过覆写ToString方法来输出你想要输出的结果,因为上述实现是如此的频繁,所以.NET 3.0中提供了新的操作运算符来简化null值的判断过程,这就是:??运算符。上述过程可以以更加震撼的代码表现为:
// Copyright : www.anytao.com
// Author : Anytao,http://www.anytao.com
// Release : 2008/07/31 1.0
object obj = null;
string objName = (obj ?? string.Empty).ToString();
Console.WriteLine(objName);
那么??运算符的具体作用是什么呢?
??运算符,又称为null-coalescing operator,如果左侧操作数为null,则返回右侧操作数的值, 如果不为null则返回左侧操作数的值。它既可以应用于可空类型,有可以应用于引用类型。