【发布时间】:2015-07-30 11:02:28
【问题描述】:
我觉得这种行为是错误的。
DateTime? birth = null;
DateTime? death = null;
Console.WriteLine(birth == death); // true
Console.WriteLine(birth <= death); // false
为什么会这样?这非常奇怪。当然,我的意思是为什么第二个表达式也不等于 true。
编辑:
我了解以下比较返回false,因为无法说明它们之间的关系:
Console.WriteLine(birth < death); // false
Console.WriteLine(birth > death); // false
这是完全可以理解的行为。但是……看看逻辑:
-
<=表示<或== - 我们不知道如何阅读
<- 它可能是true或false - 我们知道
==是true - 因为其中一个条件是
true,所以另一个条件不能不正确结果。这是逻辑或,而不是和。
我的意思是 true or something else 应该是真的。
我知道 C# 团队是这样设计的,但我的直觉不同。既然聪明人用这样的规则编写了 C#,我只想了解为什么我的直觉在这里是错误的 :)
【问题讨论】:
-
您是在问为什么语言是这样设计的,还是想要证明您所看到的行为符合该语言?
-
@JonSkeet 为什么语言是这样设计的 :) 我只是不明白为什么让它这样表现......
-
false 在这种情况下意味着“未知”。设计者本可以实现比较运算符(不包括 == 和 !=),以便它们返回可为空的布尔结果而不是布尔值,但使用它们的代码的可读性会受到明显影响。我猜他们更喜欢以这种方式实现它,尽管可能有明确记录的极端案例。
-
@vc74 请看编辑:)
-
@Randolphbirth
death 返回 false,因为其中一个变量为空。 'birth = DateTime.Now' 的结果将是错误的
标签: c# comparison operator-keyword nullable