[英]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.