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