我记得在C#中看到过类似于?: 三元运算符的东西,它只有两个部分,如果变量不为空,则返回变量值,否则返回默认值。类似于这样:
tb_MyTextBox.Text = o.Member ??SOME OPERATOR HERE?? "default";
基本上,这就是等同于:
tb_MyTextBox.Text = o.Member != null ? o.Member : "default";
有这样的东西存在吗还是我只是想象中曾经看到过?
我记得在C#中看到过类似于?: 三元运算符的东西,它只有两个部分,如果变量不为空,则返回变量值,否则返回默认值。类似于这样:
tb_MyTextBox.Text = o.Member ??SOME OPERATOR HERE?? "default";
基本上,这就是等同于:
tb_MyTextBox.Text = o.Member != null ? o.Member : "default";
有这样的东西存在吗还是我只是想象中曾经看到过?
没错:
tb_myTextBox.Text = o.Member ?? "default";
嗯,它并不完全与条件运算符相同,但我认为你在想null coalescing运算符 (??)。 (我猜你说它是“类似的”:)请注意,“三元”的意思只是指运算符的操作数数量 - 因此,尽管条件运算符是三元运算符,但null coalescing运算符是二元运算符。
它通常采用以下形式:
result = first ?? second;
如果first
为null,那么只会计算second
。这里不一定要将其作为赋值的目标——例如,您可以将其用于计算方法参数。
请注意,第一个操作数必须可空,但第二个操作数不必可空。尽管在转换方面有一些具体的细节,在简单情况下,整个表达式的类型是第二个操作数的类型。由于结合性,您还可以整齐地堆叠使用运算符:
int? x = GetValueForX();
int? y = GetValueForY();
int z = GetValueForZ();
int result = x ?? y ?? z;
注意x
和y
可为空,但z
和result
不可为空。当然,z
也可以为空,但那么result
也必须为空。
基本上,操作数将按照它们在代码中出现的顺序进行评估,在找到非空值时停止评估。
哦,尽管上述内容显示为值类型,但引用类型也可以使用(始终可为空)。
有趣的是你使用了“??SOME OPERATOR HERE??”,实际上你要找的运算符是“??”,也就是:
tb_MyTextBox.Text = o.Member ?? "default";