考虑这个最小可重现的例子。
Point point1 = new Point(1, 2, 3);
Point point2 = new Point(1, 2, 31);
Console.WriteLine(point1 == point2); // True
Console.WriteLine(point1.Equals(point2)); // True
record Point(double X, double Y, double Z)
{
public virtual bool Equals(Point other)
{
return other != null && X == other.X && Y == other.Y;
}
}
我是否要用 重写==
方法Equals
?我似乎也这么做(而且我不仅重写.Equals
)。有没有办法只重写其中一个?
Equals
对于记录类型,值相等性(用 测试)和引用相等性(用 测试)之间没有区别==
。引用文档:即,通过覆盖该
Equals
方法,您还可以改变的行为==
,正如记录所预期的那样。一种部分解决方法是添加您自己的逻辑相等方法,而不是覆盖
Equals
。这将允许您在不改变 行为的情况下测试此逻辑,但这当然是一种非常部分的解决方案 - 它不允许您在其他需要覆盖的类(例如集合或字典)==
中使用此逻辑:Equals