首页 > 后端开发 > C++ > C# Null 检查:何时使用'x is null”与'x == null”?

C# Null 检查:何时使用'x is null”与'x == null”?

Barbara Streisand
发布: 2024-12-30 12:55:09
原创
838 人浏览过

C# Null Checks: When to Use `x is null` vs. `x == null`?

C# 中的空引用比较:“x is null”与“x == null”

在 C# 7 中,引入与传统的 == null 表达式相比,模式匹配运算符 is 引发了对其用法的疑问。虽然这些表达式在处理 null 时似乎可以互换,但在比较引用类型时需要考虑一些关键差异。

类型注意事项

与比较对象的 == null 不同引用相等,x is null 检查 x 的类型。如果 x 是引用类型,则仅当 x 为 null 时,x is null 才返回 true。相反,对于 null 和具有非 null 值的引用类型,x == null 都会返回 true。

class Foo {}

Foo foo = null;

Console.WriteLine(foo is null); // True
Console.WriteLine(foo == null); // True
登录后复制

性能影响

内部,x 是 null 调用System.Object.Equals(object, object),而 x == null 调用 ceq(引用类型的比较方法)。对于空引用,两个表达式具有相同的性能,因为它们都返回 true。然而,对于非空引用,由于额外的类型检查,x is null 可能会显着变慢。

重载的等式运算符

当等式运算符(例如== 或 Equals) 对于特定类型被重载,x is null 不再检查类型相等性,而是委托给重载的运算符。另一方面,x == null 始终检查引用是否相等。

class Foo
{
    public static bool operator ==(Foo left, Foo right) => ...
    public static bool operator !=(Foo left, Foo right) => ...
}

Foo foo1 = new Foo();
Foo foo2 = null;

Console.WriteLine(foo1 is null); // False (checks type only)
Console.WriteLine(foo1 == null); // False (delegates to overloaded operator)
Console.WriteLine(foo2 is null); // True (checks type only)
Console.WriteLine(foo2 == null); // True (reference comparison)
登录后复制

何时使用一个而不是另一个

一般来说:

  • 如果您担心性能或者相等运算符是重载。
  • 如果需要检查类型相等性(例如,在模式匹配表达式中),请使用 x is null。

最终,x is null 和 x = 之间的选择= null 取决于您代码的具体要求。

以上是C# Null 检查:何时使用'x is null”与'x == null”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板