当在条件成员访问/传null运算符中目标对象为null且该成员是方法时,是否评估该方法的参数?
在下面的代码中,g()
被称为吗?
SomeClass x = null;
x?.Foo(g());
h()
在:
SomeClass x = null;
x?.Bar($"h = {h()}");
SharpLab将参数求值放在if
块中,因此将被跳过。但这是由规范或实现细节来保证的吗?
答案 0 :(得分:0)
尽管您可以很容易地尝试是否执行g
,但这是为什么的解释。 null-conditional-operator只是简单的null
检查的快捷方式:
“ [空条件运算符]测试左手的值 执行成员访问(
null
)或索引(?.
)之前的?[]
操作数 操作如果左侧操作数的值为null
,则返回null
。”
因此您的代码等效于以下内容:
if(x != null)
{
x.Foo(g());
}