运营商之间有什么区别?和?? =在C#8.0中

时间:2019-12-29 03:59:24

标签: c#-8.0

运算符之间是什么?和?? =在C#8.0中?遵循msdn文档:

  

运算符?? 返回其左侧操作数的值(如果不是)   空值;否则,它将评估右侧操作数并返回其   结果。

     

运算符?? = 将值分配给其右侧操作数   仅当左侧操作数的值为null时,左侧操作数。

但是两个示例的结果都相同

int? a = null;
int b = a ??= -1;
Console.WriteLine(b);  // output: -1

int? a = null;
int b = a ?? -1;
Console.WriteLine(b);  // output: -1

1 个答案:

答案 0 :(得分:1)

第一个示例int b = a ??= -1;实际上是将-1分配给变量a,然后将a的值分配给b??=运算符类似于+=-=等,因此您可以内联使用它,例如:

int? a = null;
a ??= -1;    // a == -1

int? b = 123;
b ??= -1;    // b == 123

在第一个示例中,如果您希望??=a都取b-1a时,实际上只需要null int b = a ?? -1;

如果a不为空,则第二个示例b仅将a分配给b,否则-1变成{{1}}。