簡體   English   中英

C# 中的“?=”和“不是”之間有區別嗎?

[英]Is there a difference between "!=" and "is not" in C#?

這是:

if(x!=y)
{

}

與此不同:

if (x is not y)
{

}

? 或者這兩個條件沒有區別?

操作員 != is not
最初的目的 價值不平等 否定模式匹配
可以執行值不等式 是的 是的
可以執行否定模式匹配 是的
可以調用implicit運算符 是的
是自己的運營商 是的
x is not null更類似於!(x == null)而不是x != null
可重載 是的
自從 C# 1.0 C# 9.0
null 的null比較值類型泛型類型參數 arguments 是的 沒有[需要引用]
不可能的比較 錯誤 警告
句法 <expr> != <expr> <expr> is [not] <expr> [or|and <expr>]*
和更多
例子 != is not
不是 null x != null x is not null
值不等式示例 x != 'a' x is not 'a'
運行時類型(錯誤)匹配 x.GetType() != typeof(Char) x is not Char

與出色接受的答案中列出的另一個區別是(因為 C# 7.0),在兩個 NaN is之間是匹配的模式,因為xy都是 NaN 時x.Equals(y)true並且NaN 值沒有整數類型。 因此, is not兩個 NaN 值之間返回該模式不匹配。

但是,C# 遵循 IEEE 浮點數和 C, 指定兩個 NaN 值之間的!=比較為true ,它們之間的==比較為false 這主要是因為1980 年的英特爾 8087 浮點協處理器沒有其他方法可以測試 NaN。

Nan 和 null 是變量可以包含但沒有值的屬性。 相等性檢查需要一個實際值來確定相等性。 畢竟,在沒人知道莎莉和彼得有多少蘋果的情況下,關於莎莉和彼得是否有相同數量的蘋果的問題毫無意義。

有時您想檢查變量是否具有沒有值的屬性。 基本的平等檢查是不夠的。 那就是當 is / is not 運算符有用時。 可以說。= 是一個值檢查,而 / 不是一個屬性檢查。

暫無
暫無

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

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