C# 6 中空条件运算符的变化
Changes in the null conditional operator in C# 6
我正在阅读 C# 6.0 中引入的更改,我对空运算符有疑问。
在 C# 6 中这个表达式
int? x= y?.length;
如果 y
是 null
且 return 是 null
, 将有效。不会引发 NullargumentException
。我认为这是对语言的一个很好的补充。它删除了额外的检查和难看的代码。
但在空条件运算符的情况下,我们可能有如下代码
int? x= y?.length ?? 0;
如果 y
是 null
,那么 0
是 returned。如果 length
为空,会发生什么? return又归零了吗?
运算符 ??
将 return 左侧表达式,如果表达式不是 null
否则右侧。
结果类型是右侧的任何内容,在您的例子中是 int
.
如果 y
为 null,或 y.length
为 null
,y?.length
的计算结果为 null
。
在这两种情况下,??
的左侧计算结果为 null
,因此 0
由 ??
编辑 return。
我正在阅读 C# 6.0 中引入的更改,我对空运算符有疑问。
在 C# 6 中这个表达式
int? x= y?.length;
如果 y
是 null
且 return 是 null
, 将有效。不会引发 NullargumentException
。我认为这是对语言的一个很好的补充。它删除了额外的检查和难看的代码。
但在空条件运算符的情况下,我们可能有如下代码
int? x= y?.length ?? 0;
如果 y
是 null
,那么 0
是 returned。如果 length
为空,会发生什么? return又归零了吗?
运算符 ??
将 return 左侧表达式,如果表达式不是 null
否则右侧。
结果类型是右侧的任何内容,在您的例子中是 int
.
y
为 null,或 y.length
为 null
,y?.length
的计算结果为 null
。
在这两种情况下,??
的左侧计算结果为 null
,因此 0
由 ??
编辑 return。