为什么我可以省略调用链中后续的空条件运算符?

2023-11-21

考虑以下代码:

IEnumerable<int> xx = null;
var tt = xx?.Where(x => x > 2).Select(x => x.ToString());

它分配null to tt。 问题是:为什么它能正常工作?

我想我必须使用?.选择为之前?.Where(...)回报null。 此外,如果我将第二行分成两行:

IEnumerable<int> xx = null;
var yy = xx?.Where(x => x > 2);
var zz = yy.Select(x => x.ToString());

将会有ArgumentNullException在第三行作为yy == null.

有什么魔力? :)
如果这是因为短路的话,我从来没想过它会变成这样。


是的,这是由于短路造成的。来自MSDN 参考:

...[T]空条件运算符是短路的。如果条件成员访问和索引操作链中的一个操作返回 null,则该链的其余部分将停止执行。

您的第二个示例抛出的原因是因为您有单独的非链接语句。短路不能应用于多个语句。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我可以省略调用链中后续的空条件运算符? 的相关文章

随机推荐