据我了解,子表达式必须始终在父表达式之前求值。
(a + b) / (c + d)
在上面的示例中,a + b
和c + d
始终在除法之前求值。我的理解是,即使a,b,c和d都可以为空,这也是正确的。
但是,假设a
为null并且如果我们编写的话,这些方法存在
(a?.Add(b))?.DivideBy(c?.Add(d))
即使b
,c
和d
不为空,也不执行任何方法。
?.
被称为运算符是否合适,还是该术语的混混?
答案 0 :(得分:2)
根据manual
?。和?[]空条件运算符
在执行之前,先测试左侧操作数的值为空。 成员访问(
?.
)或索引(?[]
)操作; 返回null
,如果 左手操作数的值为null
。
(粗体是我的)。就您而言
(a?.Add(b))?.DivideBy(c?.Add(d))
可以改写为
a // a is null
?.Add(b) // left is null? Yes; then propagate null - don't compute Add
?.DivideBy(c?.Add(d)) // left is null? Yes; then propagate null - don't exec DivideBy