当目标对象在条件成员访问/空传播运算符中为 null 时,并且该成员是一个方法,是否计算该方法的参数?
也就是说,在下面的代码中,是否调用g()
?
SomeClass x = null;
x?.Foo(g());
如何h()
:
SomeClass x = null;
x?.Bar($"h = {h()}");
SharpLab 将参数计算放在if
块内,因此将被跳过。 但这是由规范还是实现细节来保证的?
尽管您可以轻松地尝试是否执行g
,但以下是原因的解释。null 条件运算符只是简单null
检查的快捷方式:
"[空条件运算符]测试左侧的值 执行成员访问 (
?.
( 或索引 (?[]
之前null
的操作数 操作;如果左操作数的计算结果为null
,则返回null
。
因此,您的代码等效于以下内容:
if(x != null)
{
x.Foo(g());
}