最佳实践:比较 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中文网其他相关文章!