2013-11-24 49 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