我想我记得在C#中看到类似于?: ternary operator的东西,它只有两个部分,如果它不是null则返回变量值,如果是,则返回默认值。像这样:
tb_MyTextBox.Text = o.Member ??SOME OPERATOR HERE?? "default";
基本上相当于:
tb_MyTextBox.Text = o.Member != null ? o.Member : "default";
这样的事情是存在还是只是想象在某个地方看到这个?
答案 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;
请注意x
和y
如何可以为空,但z
和result
不是。当然,z
可以可以为空,但是result
也必须可以为空。
基本上,操作数将按照它们在代码中出现的顺序进行评估,并在找到非空值时停止评估。
哦,尽管上面是以值类型的形式显示的,但它也适用于引用类型(总是可以为空)。
答案 2 :(得分:3)
有趣的是你使用了“??某些操作者?”,因为你正在寻找的操作符是“??”,即:
tb_MyTextBox.Text = o.Member ?? "default";
答案 3 :(得分:1)
是的,它被称为Null Coalescing运算符: