可空类型和运算符

时间:2013-11-24 07:21:02

标签: c# c#-2.0

我正在阅读 Wrox 中的 Nullable Types and Operators ,并且发现了以下声明:

  

当比较可空类型时,如果只有一个操作数为null,则比较将始终等于false。这意味着你不能假设条件是真的,因为它的反面是错误的。

现在,我得到第一个声明的含义,但没有得到第二个声明。 你能详细说明一下吗?

2 个答案:

答案 0 :(得分:3)

看起来就像引用的说法,无论操作数如何,任何与null类型的比较都将返回null。

类似(null != 5)之类的内容会返回false,其中(null == 5)也会返回false。


现在,有趣的是,当我运行程序时,null != 5返回 true ,所以虽然我无法验证c#2.0的语句,但它绝对不再是真的在c#4.0 +

这是我用过的示例代码:

int? a = null;

int? b = 5;

if (a != b)
{
    Console.WriteLine("A != B");
}
if (a == b)
{
    Console.WriteLine("A == B");
}

这是输出

  

A!= B
  按任意键继续 。 。

答案 1 :(得分:2)

该引用错误,MSDN是官方来源:http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx

  

当您与可空类型进行比较时,如果值为1   可以为空的类型是null,而另一个不是,所有的比较   评估为假除了!=(不等于)

第二个陈述仅仅意味着比较及其相反可能都是假的,例如a> = b且a< b都是假的。

这是逻辑。空的意思是一种未知的价值。现在尝试计算5< null,5< = null,5 == null,5> = null,5> null。你无法准确地计算出这些中的任何一个,它们也不是真或假,它们是未知的,但是错误比真实更有意义。例外是5!= null。一个确切的数字并不是未知的,所以它更有意义,它是真的而不是假的。所以==和!=是彼此相反的,这是一个简单的例子,但你不能说这是为了更少的比较。当他们制作C#/ .NET时,这是一个设计选择。

另一方面,SQL认为非常正确,我认为使用3值逻辑,请参见此处:http://en.wikipedia.org/wiki/Null_%28SQL%29#Comparisons_with_NULL_and_the_three-valued_logic_.283VL.29

相关问题