C#中的合并运算符是什么?

16

我记得在C#中看到过类似于?: 三元运算符的东西,它只有两个部分,如果变量不为空,则返回变量值,否则返回默认值。类似于这样:

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

基本上,这就是等同于:

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

有这样的东西存在吗还是我只是想象中曾经看到过?

4个回答


23

嗯,它并不完全与条件运算符相同,但我认为你在想null coalescing运算符 (??)。 (我猜你说它是“类似的”:)请注意,“三元”的意思只是指运算符的操作数数量 - 因此,尽管条件运算符是三元运算符,但null coalescing运算符是二元运算符。

它通常采用以下形式:

result = first ?? second;

如果first为null,那么只会计算second。这里不一定要将其作为赋值的目标——例如,您可以将其用于计算方法参数。

请注意,第一个操作数必须可空,但第二个操作数不必可空。尽管在转换方面有一些具体的细节,在简单情况下,整个表达式的类型是第二个操作数的类型。由于结合性,您还可以整齐地堆叠使用运算符:

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

int result = x ?? y ?? z;

注意xy可为空,但zresult不可为空。当然,z也可以为空,但那么result也必须为空。

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

哦,尽管上述内容显示为值类型,但引用类型也可以使用(始终可为空)。


3

1
嘿,肯定是我的潜意识在发出信号。我知道我在某个地方见过它。 - Abe Miessler

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接