Что сравнивается в моем классе без EqualityComparer? - PullRequest
0 голосов
/ 26 октября 2010

Я хочу проверить, находится ли объект в очереди, прежде чем ставить его в очередь.Если явно не определить EqualityComparer, что сравнивает функция Contains ()?

Если она сравнивает значения свойств, это прекрасно.Если сравнивать, чтобы увидеть, существует ли ссылка на этот объект в очереди, это побеждает то, что я пытаюсь выполнить в своем коде.

Ответы [ 2 ]

7 голосов
/ 26 октября 2010

Для классов операция равенства по умолчанию является справочной - она ​​предполагает, что идентичность объекта и равенство, в основном, одинаковы.

Вы можете преодолеть это путем переопределения Equals и GetHashCode.Я бы также предложил реализовать IEquatable<T>, чтобы прояснить это.Ваша реализация хеш-кода должна генерировать хеш-код из тех же значений, что и операция равенства.

0 голосов
/ 26 октября 2010

Значением по умолчанию для ссылочных типов является сравнение ссылки.

Однако, если тип реализует IEquatable<>, он может выполнять другое сравнение.Если вам нужно провести конкретное сравнение на равенство, вам нужно создать его самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...