簡體   English   中英

可空類型和運算符

[英]Nullable Types and Operators

我從Wrox閱讀有關Nullable Types和Operators的內容 ,並遇到以下語句:

比較可為空的類型時,如果只有一個操作數為空,則比較將始終等於false。 這意味着您不能僅僅因為條件相反而就假定條件為真。

現在,我明白了第一條陳述的含義,但沒有得到第二條陳述。 您能詳細說明一下嗎?

似乎引號說的是,任何具有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
按任意鍵繼續 。

那句話是錯誤的,MSDN是官方來源: http : //msdn.microsoft.com/en-us/library/2cf62fcy.aspx

當您對可為空的類型執行比較時,如果其中一個可為空的類型的值是null而另一個不是,則所有比較的結果都為false, 除了!=(不等於)

第二條語句僅表示比較及其對立均可能為假,例如a> = b和a <b均為假。

這是邏輯。 空值表示未知值。 現在嘗試計算5 <null,5 <= null,5 == null,5> = null,5> null。 您無法精確地計算出其中的任何一個,它們也不是true或false,它們是未知的,但是false比true更有意義。 例外是5!= null。 確切的數字是未知的,因此它比假數字更有意義。 所以==和!=彼此相反,這是簡單的情況,但對於比較少的比較,您不能這么說。 他們制作C#/。NET時,這是一種設計選擇。

另一方面,我認為SQL使用3值邏輯是正確的,請參見此處: http : //en.wikipedia.org/wiki/Null_%28SQL%29#Comparisons_with_NULL_and_the_three-valued_logic_.283VL.29

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM