C# 6 中空条件运算符的变化

Changes in the null conditional operator in C# 6

我正在阅读 C# 6.0 中引入的更改,我对空运算符有疑问。

在 C# 6 中这个表达式

int? x= y?.length;
如果 ynull 且 return 是 null

将有效。不会引发 NullargumentException。我认为这是对语言的一个很好的补充。它删除了额外的检查和难看的代码。

但在空条件运算符的情况下,我们可能有如下代码

int? x= y?.length ?? 0;

如果 ynull,那么 0 是 returned。如果 length 为空,会发生什么? return又归零了吗?

运算符 ?? 将 return 左侧表达式,如果表达式不是 null 否则右侧。

结果类型是右侧的任何内容,在您的例子中是 int.

如果 y 为 null,或 y.lengthnull

y?.length 的计算结果为 null

在这两种情况下,?? 的左侧计算结果为 null,因此 0?? 编辑 return。