比较运算符如何处理空整数?

我开始学习可空类型,并遇到了以下行为。

在尝试使用 nullable int 时,我看到比较运算符给出了意想不到的结果。例如,在下面的代码中,我得到的输出是 “两者和1相等”。注意,它也不打印“ null”。

int? a = null;
int? b = 1;


if (a < b)
Console.WriteLine("{0} is bigger than {1}", b, a);
else if (a > b)
Console.WriteLine("{0} is bigger than {1}", a, b);
else
Console.WriteLine("both {0} and {1} are equal", a, b);

我希望任何非负整数都大于 null 我是不是漏掉了什么?

106285 次浏览

根据 MSDN-它在“运营商”部分的页面下面:

当您执行与可空类型的比较时,如果其中一个可空类型的值是 null而另一个不是,则除了 !=之外,所有的比较都计算为 false

所以 a > ba < b都等于 false,因为 a是空的..。

正如 MSDN 所说

< p > 执行与可空类型的比较时,如果 的类型为 null,而另一个类型为非 null,则所有比较 除了! = (不等于)外,计算结果为假 假设由于特定比较返回 false,因此 反例返回 true。在下面的示例中,10不是 大于,小于,也不等于 null。只有 num1! = num2 计算结果为 true
int? num1 = 10;
int? num2 = null;
if (num1 >= num2)
{
Console.WriteLine("num1 is greater than or equal to num2");
}
else
{
// This clause is selected, but num1 is not less than num2.
Console.WriteLine("num1 >= num2 returned false (but num1 < num2 also is false)");
}


if (num1 < num2)
{
Console.WriteLine("num1 is less than num2");
}
else
{
// The else clause is selected again, but num1 is not greater than
// or equal to num2.
Console.WriteLine("num1 < num2 returned false (but num1 >= num2 also is false)");
}


if (num1 != num2)
{
// This comparison is true, num1 and num2 are not equal.
Console.WriteLine("Finally, num1 != num2 returns true!");
}


// Change the value of num1, so that both num1 and num2 are null.
num1 = null;
if (num1 == num2)
{
// The equality comparison returns true when both operands are null.
Console.WriteLine("num1 == num2 returns true when the value of each is null");
}


/* Output:
* num1 >= num2 returned false (but num1 < num2 also is false)
* num1 < num2 returned false (but num1 >= num2 also is false)
* Finally, num1 != num2 returns true!
* num1 == num2 returns true when the value of each is null
*/

总结一下: 任何与 null (>=<<=>)的不等式比较都返回 false,即使两个操作数都为 null。

null >  anyValue //false
null <= null     //false

任何与 null (==!=)相等或不相等的比较都可以“按预期”工作。

null == null     //true
null != null     //false
null == nonNull  //false
null != nonNull  //true

比较 C # 和 SQL

C # : a = null and b = null = > a = = b = > true

SQL: a = null and b = null = > a = = b = > false