Это ужасное определение Equals
, потому что оно не транзитивно.
Рассмотрим
x = { Id = 1, Money = 0.1, Code = "X" }
y = { Id = 1, Money = 0.2, Code = "Y" }
z = { Id = 3, Money = 0.2, Code = "Z" }
Тогда x == y
и y == z
, но x != z
.
Кроме того, мы можем установить, что единственная разумная реализация GetHashCode
- это карта констант.
Предположим, что x
и y
являются различными объектами.Пусть z
будет объектом
z = { Id = x.Id, Money = y.Money, Code = "Z" }
Тогда x == z
и y == z
, чтобы x.GetHashCode() == z.GetHashCode()
и y.GetHashCode() == z.GetHashCode()
установили, что x.GetHashCode() == y.GetHashCode()
.Поскольку x
и y
были произвольными, мы установили, что GetHashCode
является константой.
Таким образом, мы показали, что единственно возможная реализация GetHashCode
- это
private readonly int constant = 17;
public override int GetHashCode() {
return constant;
}
Все это вместе дает понять, что вам нужно переосмыслить концепцию, которую вы пытаетесь моделировать, и придумать другое определение Equals
.