C#中的Coalesce运算符?

Abe*_*ler 11 .net c# asp.net null-coalescing-operator

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

tb_MyTextBox.Text = o.Member ??SOME OPERATOR HERE?? "default";
Run Code Online (Sandbox Code Playgroud)

基本上相当于这个:

tb_MyTextBox.Text = o.Member != null ? o.Member : "default";
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 19

好吧,它与条件运算符不完全相同,但我认为你正在考虑空合并运算符(??).(我猜你确实说它"相似":)注意"三元"只是指操作符所在的操作数 - 所以当条件运算符是三元运算符时,空合并运算符是二元运算符.

它大致采用以下形式:

result = first ?? second;
Run Code Online (Sandbox Code Playgroud)

这里second只会被评估first为null.它不必是赋值的目标 - 例如,您可以使用它来计算方法参数.

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

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

int result = x ?? y ?? z;
Run Code Online (Sandbox Code Playgroud)

注意如何xy是空的,但zresult没有.当然,z 可以可以为空的,但那时result也必须是可以为空的.

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

哦,虽然以上是以值类型的形式显示的,但它也适用于引用类型(它们总是可以为空).