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

时间:2018-06-27 19:39:02

标签: c# short-circuiting side-effects null-propagation-operator

当在条件成员访问/传null运算符中目标对象为null且该成员是方法时,是否评估该方法的参数?

在下面的代码中,g()被称为吗?

SomeClass x = null;
x?.Foo(g());

h()在:

SomeClass x = null;
x?.Bar($"h = {h()}");

SharpLab将参数求值放在if块中,因此将被跳过。但这是由规范或实现细节来保证的吗?

1 个答案:

答案 0 :(得分:0)

尽管您可以很容易地尝试是否执行g,但这是为什么的解释。 null-conditional-operator只是简单的null检查的快捷方式:

  

“ [空条件运算符]测试左手的值   执行成员访问(null)或索引(?.)之前的?[]操作数   操作如果左侧操作数的值为null,则返回null。”

因此您的代码等效于以下内容:

if(x != null)
{
    x.Foo(g());
}