副作用、短路和空传播方法调用运算符 (?)



当目标对象在条件成员访问/空传播运算符中为 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());
}

相关内容

  • 没有找到相关文章

最新更新