0
空条件运算符可用于跳过空目标上的方法调用。在这种情况下,方法论点会被评估吗?当空条件运算符短路时,它是否仍评估方法参数?
例如:当myObject
是null
myObject?.DoSomething(GetFromNetwork());
正所谓GetFromNetwork
?
空条件运算符可用于跳过空目标上的方法调用。在这种情况下,方法论点会被评估吗?当空条件运算符短路时,它是否仍评估方法参数?
例如:当myObject
是null
myObject?.DoSomething(GetFromNetwork());
正所谓GetFromNetwork
?
myObject?.Method();
基本上等同于
var temp = myObject;
if (temp != null) {
temp.Method();
}
你看,如果myObject
是null
没有参数进行评估。
请注意,如果您将myObject
替换为
它们并不等同。具体来说,前者只评估一次“对象”,后者如果不是“'null”则评估两次。由于它们不相同,因此不应从中得出结论。 – hvd
@ hvd他们是。即使在规格(*字面上!*)中也是如此。由于它是一个变量,因此没有双重评估。 https://github.com/ljw1004/csharpspec/blob/gh-pages/expressions.md#member-access – Adrian
他们不是一般的,正如你链接到的规范中所述:“除了P只评估一次。“,稍后”除了P只评估一次“,但后来”除了P只评估一次“,最后”除了ab和ab [0]只评估一次“。和“除了a.b和a.b [0]只评估一次”。是的,对于局部变量,双重评估不会改变结果。这是* only *例外的部分对您的答案IMO来说是一个很好的补充。 – hvd