首页 > 后端开发 > C++ > 我应该如何比较 C# 中引用类型的两个实例?

我应该如何比较 C# 中引用类型的两个实例?

Linda Hamilton
发布: 2025-01-07 17:37:39
原创
494 人浏览过

How Should I Compare Two Instances of a Reference Type in C#?

最佳实践:比较 C# 中的两个引用类型实例

比较引用类型时,务必明确预期行为:值相等还是引用同一性。

重写相等运算符 ("==") 和 Equals 方法以实现引用同一性

过去,开发人员会重写 "==" 和 Equals 方法来检查引用同一性。但是,编码标准建议不要这样做,因为它可能会在某些情况下导致歧义。

选项 1:为值相等实现 IEquatable 接口

对于具有值语义的引用类型(其中等价性被视为相等性的不可变类型),建议的方法是实现 System.IEquatable 接口。这允许您定义一个自定义相等比较,重点关注值而不是引用。

示例:

<code class="language-csharp">class Point : IEquatable<Point> {
    // ...
    public bool Equals(Point other) {
        return X.Equals(other.X) && Y.Equals(other.Y);
    }
    // ...
}</code>
登录后复制

选项 2:使用类型检查的自定义 Equals 方法实现值相等

如果您更喜欢自定义 Equals 方法,请确保它同时检查引用相等性和被比较对象的类型。这可以防止在比较派生类对象时出现意外行为。

示例:

<code class="language-csharp">public bool Equals(Point other) {
    if (other is null) return false;
    if (other.GetType() != GetType()) return false;
    return X.Equals(other.X) && Y.Equals(other.Y);
}</code>
登录后复制

何时使用引用同一性

不要为不表示不可变值的引用类实现 "==" 和 "!=" 运算符。相反,依赖它们默认的比较对象同一性的行为。

以上是我应该如何比较 C# 中引用类型的两个实例?的详细内容。更多信息请关注PHP中文网其他相关文章!

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