我有两个 int 类型的变量? (或者 Nullable
谁能向我解释为什么这是合乎逻辑的,因为 >= 运算符的语义定义包含“或”一词?
最佳答案
当该功能最初在 C# 2.0 中设计时,曾就此奇怪现象展开过激烈的辩论。问题是 C# 用户已经完全习惯了这种有意义的方式:
if(someReference == null)
将相等性扩展到可空值类型时,您有以下选择。
可空相等性真正提升。如果一个或两个操作数为空,则结果既不是真也不是假,而是空。在这种情况下,您可以:
a) 将
if
语句中的可空值类型相等设为非法,因为if
语句需要一个 bool,而不是一个可空的 bool。相反,如果他们想要与 null 进行比较,则要求每个人都使用HasValue
。这是冗长且令人恼火的。b) 自动将 null 转换为 false。这样做的缺点是,如果 x 为 null,
x==null
将返回 false,这令人困惑,并且违背了人们对与引用类型进行 null 比较的理解。
可空相等性未解除。可为空的相等性要么为真要么为假,与空值的比较是空值检查。这使得可空相等与可空不等不一致。
这些选择显然都不是正确的;他们都有优点和缺点。例如,VBScript 选择 1b。经过多次争论,C# 设计团队选择了 #2。
关于c# - 为什么当 == 为 null 值返回 true 时 >= 返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4399932/