亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 C# 編譯器會為 NULL 和數字比較產生結果?

為什么 C# 編譯器會為 NULL 和數字比較產生結果?

C#
收到一只叮咚 2021-06-11 19:34:29
我有以下代碼片段,它使 TaskA 在 Employee 對象為 NULL 時運行(預計僅在 Employee ID 不等于 1 時才運行 TaskA)。if (Employee?.Id != 1) <PerformTaskA>;在這里,為什么 C# 編譯器比較 NULL 和 1?不應該拋出異常嗎?另外,避免此類情況的更好做法是什么?
查看完整描述

3 回答

?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

當您執行與nullable類型的比較時,如果可空類型之一的值為 null 而另一個不是,則所有比較的計算結果false都為,除了!= (not equal)。重要的是不要假設因為特定的比較返回 false,相反的情況返回 true。在以下示例中,10 不大于、小于或等于 null。只有 num1 != num2 評估為真。


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");

}

/* 輸出:


num1 >= num2 返回 false(但 num1 < num2 也是 false)


num1 < num2 返回 false(但 num1 >= num2 也是 false)


最后, num1 != num2 返回 true!


num1 == num2 當每個值都為空時返回真


*/


檢查此 Microsoft文檔。

此處查看Live Fiddle。


查看完整回答
反對 回復 2021-06-20
  • 3 回答
  • 0 關注
  • 235 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號