博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C# 运算符 ??(空合并运箅符) 解析

Posted on 2012-11-19 23:27  Hamilton Tan  阅读(425)  评论(0)    收藏  举报

1.

可空类型和运算符
对于布尔类型,可以给它指定iue或false值。但是,要把该类型的值定义为mdeEned,该怎 :
么办?此时使用可空类型可以给应用程序提供一个独特的值。如果在程序中使用可空类型,就必须 :
考虑nuu值在与各种运算符一起使用时的影响。通常可空类型与一元或二元运算符一起使用时,如
果其中
一个操作数或两个操作数都是nuⅡ,其结果就是null。 例如:

int? a = null;
int? b = a + 4;
int? c = a * 5;

但是在比较可空类型时,只要有ˉ个操作数是nuu,比较的结果就是nlse。 即不能因为一个条件是
false,就认为该条件的对立面是砥,这在使用非可空类型的程序中很常见。例如:

int? a = null;
int? b = -5;
if (a >= b)
{
Console.WriteLine("a>=b");
Console.ReadLine();
}
else
{
Console.WriteLine("a<b");//输出a<b
Console.ReadLine();
}

2.空合并运箅符(??)
空合并运算徇㈦)提供了一种快捷方式,可以在处理可空类型和引用类型时表示nuu可能的值。
这个运算符放在两个操作数之间,第一个操作数必须是一个可空类型或引用类型;第二个操作数必须
与第一个操作数的类型相同,或者可以隐含地转换为第一个操作数的类型。空合并运算符的计算如下:
● 如果第一个操作数不是nuⅡ,整个表达式就等于第一个操作数的值。

● 如果第一个操作数是null,整个表达式就等于第二个操作数的值。

例如:

int? a = null;
int b;

b = a ?? 10;//输出10

a = 3;
b = a ?? 10;//输出3


如果第二个操作数不能隐含地转换为第一个操作数的类型,就生成一个编译错误。