Скорее всего, вы не переопределили GetHashCode
в соответствии с Equals
.
Для контракта GetHashCode
требуется, чтобы, если OBJ1.Equals(OBJ2)
вернул true, OBJ1.GetHashCode()
должен вернутьто же значение, что и OBJ2.GetHashCode()
.
IIRC, вы получите ошибку компилятора (или хотя бы предупреждение), если переопределите Equals
без переопределения GetHashCode()
.
Другая возможностьчто вы на самом деле не overridden
Equals
, но перегружены , добавив новую подпись, например
public bool Equals(Class1 other)
В общем, чтобы обеспечить «естественное» сравнение равенства значенийвам следует:
- Переопределить равно (объект)
- Переопределить GetHashCode
- Настоятельно рассмотреть возможность реализации
IEquatable<T>
- Рассмотреть возможность перегрузки == и! =