C#中的Coalesce运算符?

时间:2010-10-13 16:11:35

标签: c# .net asp.net null-coalescing-operator

我想我记得在C#中看到类似于?: ternary operator的东西,它只有两个部分,如果它不是null则返回变量值,如果是,则返回默认值。像这样:

tb_MyTextBox.Text = o.Member ??SOME OPERATOR HERE?? "default";

基本上相当于:

tb_MyTextBox.Text = o.Member != null ? o.Member : "default";

这样的事情是存在还是只是想象在某个地方看到这个?

4 个答案:

答案 0 :(得分:25)

烨:

tb_myTextBox.Text = o.Member ?? "default";

http://msdn.microsoft.com/en-us/library/ms173224(VS.80).aspx

答案 1 :(得分:19)

嗯,它与conditional operator并不完全相同,但我认为你在考虑null coalescing operator(??)。 (我猜你确实说它“相似”:)请注意,“三元”只是指操作符所在的操作数的数量 - 所以当条件运算符是三元运算符时,空合并运算符是二元运算符。 p>

它大致采用以下形式:

result = first ?? second;

只有second为空,才会评估此first。它不必是赋值的目标 - 例如,您可以使用它来计算方法参数。

请注意,第一个操作数可以为空 - 但第二个操作数没有。虽然有一些关于转换的具体细节,但在简单的情况下,整个表达式的类型是第二个操作数的类型。由于相关性,您也可以整齐地堆叠运算符的使用:

int? x = GetValueForX();
int? y = GetValueForY();
int z = GetValueForZ();

int result = x ?? y ?? z;

请注意xy如何可以为空,但zresult不是。当然,z 可以可以为空,但是result也必须可以为空。

基本上,操作数将按照它们在代码中出现的顺序进行评估,并在找到非空值时停止评估。

哦,尽管上面是以值类型的形式显示的,但它也适用于引用类型(总是可以为空)。

答案 2 :(得分:3)

有趣的是你使用了“??某些操作者?”,因为你正在寻找的操作符是“??”,即:

tb_MyTextBox.Text = o.Member ?? "default";

http://msdn.microsoft.com/en-us/library/ms173224.aspx

答案 3 :(得分:1)

是的,它被称为Null Coalescing运算符:

  

?? Operator (C# Reference) (MSDN)