Considere este exemplo mínimo reproduzível.
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;
}
}
Eu substituo o ==
método por Equals
? Parece que eu também (e não apenas substituo .Equals
). Existe uma maneira de substituir apenas um deles?
Com tipos de registro, não há diferença entre igualdade de valor (testada com
Equals
) e igualdade de referência (testada com==
). Para citar a documentação :Ou seja, ao sobrescrever o
Equals
método, você também está alterando o comportamento do==
, conforme esperado para os registros.Uma espécie de solução parcial seria adicionar seu próprio método para igualdade lógica e não substituir
Equals
. Isso permitirá testar essa lógica sem alterar o comportamento de==
, mas é claro que é uma solução muito parcial - não permitirá que você use essa lógica em outras classes que esperamEquals
ser substituídas (como conjuntos ou dicionários):