1

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

也就是说,在下面的代码中,g()调用的是?

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

怎么样h()

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

SharpLab 将参数评估放在if块内,因此将被跳过。但这是否由规范或实现细节保证?

4

1 回答 1

3

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

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

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

if(x != null)
{
    x.Foo(g());
}
于 2018-06-27T19:53:08.460 回答