我今天遇到了一个奇怪的场景,我想知道有没有人能解释为什么我会看到下面所看到的.
我希望以下所有语句的计算结果都为True
,但当可为空的bool设置为False
时,它的计算结果为False
.
我读过其他文章,指出您应该优先使用使用空值排序规则的运算符.这当然是可行的,但这不能解释为什么第二个表达式的计算结果为False
,这是我想要回答的问题.
我甚至创造了Sharplab.io个这样的东西.在我看来,前两个表达式中的True
个部分刚刚被删除.这对我来说没有任何意义,似乎是一个错误.当然,您可以使用括号来绕过它,但这种行为在我看来真的很奇怪.
bool? nullableBoolEqualNull = null;
bool? nullableBoolEqualFalse = false;
Console.WriteLine(nullableBoolEqualNull ?? false || true); // Evaluates to `True`
Console.WriteLine(nullableBoolEqualFalse ?? false || true); // Evaluates to `False`
Console.WriteLine((nullableBoolEqualNull ?? false) || true); // Evaluates to `True`
Console.WriteLine((nullableBoolEqualFalse ?? false) || true); // Evaluates to `True`
事先感谢您对这个问题的任何见解.