带有 ?? 的空传播没有按预期工作

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 为真时计算结果为假。