繁体   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