带有 ?? 的空传播没有按预期工作
Null propagation with ?? does not work as expected
我估计了空传播的奇特效果,您可以在此处看到:
1. string x = "SomeString";
2. Console.WriteLine(! x?.Equals(null) ?? (false) ? true : false); // true
3. Console.WriteLine(! x?.Equals(null) ?? (true) ? false : true); // false (!)
4. Console.WriteLine(! x?.Equals(null)); // true
有人可以解释为什么第 3 行中的表达式的计算结果为假吗?据我了解空传播运算符??仅在表达式为 null 时才执行,但正如您在第 4 行中看到的那样。左侧的表达式计算结果为 true,而不是 null。
所以如果 !x?.Equals(null) 为真,为什么 null 向右传播 ? (真的) ? false : true 将此值更改为 false?
我确定这个错误是我和我的理解造成的,但我已经将这个错误分解了几个小时,我真的很困惑。感谢您对此的任何解释。
第 4 行的表达式为真。
在 L3 中使用:
空合并运算符无效,因为 L4 不为空,这给您留下:
L4 ? false : true
当 L4 为真时计算结果为假。
我估计了空传播的奇特效果,您可以在此处看到:
1. string x = "SomeString";
2. Console.WriteLine(! x?.Equals(null) ?? (false) ? true : false); // true
3. Console.WriteLine(! x?.Equals(null) ?? (true) ? false : true); // false (!)
4. Console.WriteLine(! x?.Equals(null)); // true
有人可以解释为什么第 3 行中的表达式的计算结果为假吗?据我了解空传播运算符??仅在表达式为 null 时才执行,但正如您在第 4 行中看到的那样。左侧的表达式计算结果为 true,而不是 null。
所以如果 !x?.Equals(null) 为真,为什么 null 向右传播 ? (真的) ? false : true 将此值更改为 false?
我确定这个错误是我和我的理解造成的,但我已经将这个错误分解了几个小时,我真的很困惑。感谢您对此的任何解释。
第 4 行的表达式为真。
在 L3 中使用: 空合并运算符无效,因为 L4 不为空,这给您留下:
L4 ? false : true
当 L4 为真时计算结果为假。