我对空条件运算符如何与普通属性访问级联感到困惑。举这两个例子:
a?.b.c
(a?.b).c
我希望它们是等价的:首先,计算 a?.b
的值,然后计算 result.c
。因此,如果 a == null
,则应抛出异常。
但是,这只发生在第二个表达式中。第一个表达式的计算结果为 null
,这意味着它与 a?.b?.c
相同。 为什么?
最佳答案
这只是运算符优先级的问题。让我们来看看案例:
a?.b.c
- Evaluate
a
=>null
被返回,鉴于 the null-conditional operators are short-circuiting,没有其他任何东西被评估.
(a?.b).c
- 评估
a
=> 返回null
- 评估
((B)null).c
=> 抛出NullReferenceException
为了使这些情况等同,您应该进行比较
a?.b.c
(a?.b)?.c
a?.b?.c
(正如您已经提到的)
关于c# - 为什么 null 条件运算符会更改常规属性访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51640497/