“空条件运算符”是误称吗?

时间:2018-08-21 18:21:42

标签: c# computer-science

据我了解,子表达式必须始终在父表达式之前求值。

(a + b) / (c + d)

在上面的示例中,a + bc + d始终在除法之前求值。我的理解是,即使a,b,c和d都可以为空,这也是正确的。

但是,假设a为null并且如果我们编写的话,这些方法存在

(a?.Add(b))?.DivideBy(c?.Add(d))

即使bcd不为空,也不执行任何方法。

?.被称为运算符是否合适,还是该术语的混混?

1 个答案:

答案 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