2013-11-24 150 views
2

我是从Wrox的阅读可空类型和运算符和整个下面的语句来:可空类型和运算符

当比较可空类型,如果只有一个操作数为空值,比较将永远等于错误。这意味着你不能仅仅因为它的对立是假的而假定条件是真的。

现在,我得到了第一条语句的含义,但没有得到第二条语句。 请您详细说明一下吗?

+0

你在哪里读书呢?它在哪里我们可以去看看它? –

+0

你可以肯定地认为,如果一个条件的相反是错误的,那就是真的 - 这就是相反的意思。 –

+0

不,它来自专业C#4和.NET 4 –

回答

3

看起来好像引用是说任何与null类型的比较都会返回null,而不管操作数如何。

所以像(null != 5)会返回false,其中(null == 5)也将返回false。


现在,有趣的是,当我跑的程序,null != 5返回真正,所以虽然我不能验证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
按任意键继续。 。 。

2

这报价是错误的,MSDN的官方源:http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx

当您执行可空类型的比较,如果一个 可空类型的值是零,另一种是不,所有比较 评估为假除了!=(不等于)

第二条语句只是意味着一个比较和其相对的可以是两个假,例如> = b和a < b都是假的。

这是逻辑。空类型意味着一个未知值。现在尝试计算5 < null,5 < = null,5 == null,5 > = null,5 > null。你无法准确计算出其中的任何一个,它们也不是真的或假的,它们是未知的,但是错误比真实更有意义。例外是5!= null。一个确切的数字不是未知的,所以它更有意义,它是真实的而不是假的。所以==和!=是彼此相反的,这很容易,但是你不能说更少的比较。这是他们制作C#/ .NET时的设计选择。在另一方面

SQL得到它完全正确,我认为有三值逻辑,在这里看到:http://en.wikipedia.org/wiki/Null_%28SQL%29#Comparisons_with_NULL_and_the_three-valued_logic_.283VL.29