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

3
我是一个有用的助手,可以翻译文本。

我正在学习C# 6.0引入的更改,并且有一个关于空操作符的问题。

在C# 6中,这个表达式

int? x= y?.length;

如果ynull,则将有效并返回null。不会引发NullargumentException异常。我认为这是语言的一个很好的补充。它消除了额外的检查和丑陋的代码。
但是,在空条件运算符的情况下,我们可能会有以下代码。
int? x= y?.length ?? 0;

如果ynull,那么返回0。但如果length为null呢?它会再次返回零吗?

3
length将是一个int类型,因此它将返回0。 - Nikhil Agrawal
1
是的。y?.length首先被评估。因此:当y?.lengthnull时,(null ?? 0)将被评估为0。我不确定是否只需要强制转换:(int?)0 - pwas
1
@NikhilAgrawal 我们不知道 lengthint 还是 int?。在我看来,它更像是 int? - pwas
对于这种情况,@NikhilAgrawal,它是int类型吗? - John Demetriou
@nopeflow 这正是我所思考的,但我没有100%的把握并且也无法编写代码进行测试,因为我当前未安装C# 6。 - John Demetriou
1个回答

5
运算符??会在表达式不为null时返回左侧表达式,否则返回右侧表达式。
结果类型是右侧表达式的类型,在你的情况下是一个inty?.length如果y为空或y.length为空,则返回null
在这两种情况下,??的左侧表达式都会被评估为null,因此0将被??返回。

1
我的猜测是正确的,哈哈。 - John Demetriou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接