Переопределяющие операторы равенства - PullRequest
8 голосов
/ 26 июля 2011

Я реализовал класс, который перегружает операторы == и !=.

Кажется, это работает нормально; однако я получаю предупреждение 'type' defines operator == or operator != but does not override Object.Equals(object o).

Хорошо, я реализовал Equals. Но теперь я получаю предупреждение 'type' defines operator == or operator != but does not override Object.GetHashCode().

Это заканчивается в какой-то момент? Или я забрел в бесконечный след требований только потому, что хочу перегрузить == и !=?

Ответы [ 2 ]

11 голосов
/ 26 июля 2011

Это заканчивается в какой-то момент?

Да, как только вы реализуете GetHashCode, это закончится. Эрик Липперт написал о его важности . Все, что я могу сделать, это предложить вам прочитать его и доверять ему: -)

1 голос
/ 26 июля 2011

Да, это закончится, когда вы переопределите GetHashCode.

При реализации операторов равенства и, кроме того, Equals, программист обязан предоставить реализацию для предоставления настраиваемого хеш-кода для этого типа.

Подробнее см. в этом справочнике MSDN .

...