[英]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
之間是匹配的模式,因為當x
和y
都是 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.