我有两个int类型的变量?(或如果你愿意,可以为Nullable <int>).我想对两个变量进行大于或等于(> =)的比较,但事实证明,如果两个变量都为null,则返回false,而显然==运算符返回true.
有人可以向我解释为什么这是合乎逻辑的,因为> =运算符的语义定义包含单词"or"?
我昨天和朋友一起吃午饭,他们null在C#中抱怨.他说那null是不合逻辑的.我决定测试他的说法,所以我测试了一些简单的逻辑命题:
Console.WriteLine(null == null); //True
//Console.WriteLine(null == !!null); //BOOM
Console.WriteLine(10 >= null); //False
Console.WriteLine(10 <= null); //False
Console.WriteLine(!(10 >= null)); //True
Console.WriteLine(!(10 <= null)); //True
Run Code Online (Sandbox Code Playgroud)
检查平等似乎很简单,这就是我所期望的.然而,更多/更少的陈述是逻辑矛盾,我觉得这真的很混乱!这些不应该抛出?否定操作会像您期望的那样抛出.
如果我尝试null在Ruby或Python中运行比较(除了相等),我会得到一个类型错误:"无法将数字与nil进行比较".为什么C#不这样做?
当我注意到这一点时,我正在对可空类型进行一些比较:
int? a = null;
int? b = null;
// a == b; ==> true
// a <= b; ==> false
Run Code Online (Sandbox Code Playgroud)
对我来说,<=运营商就相当于== OR <既然a == b是true的,我也除外true了a <= b.
对你来说似乎也不合逻辑吗?
为什么<=和>=运营商这样做?有什么特别的原因吗?