Используют ли классы .Net Collection .Equals () для содержащихся членов для оценки .Contains ()? - PullRequest
2 голосов
/ 14 декабря 2010

Субъект в значительной степени говорит обо всем.

Использует ли класс коллекции (переопределенный) .Equals() метод, чтобы определить, является ли класс коллекции .Contains() элементом или нет? Или он использует ссылочное равенство или какой-то другой метод?

Я бы хотел, чтобы класс коллекции игнорировал одно поле на содержащихся элементах при определении, является ли коллекция .Contains() элементом или нет.

Ответы [ 4 ]

3 голосов
/ 14 декабря 2010

Collection использует EqualityComparer<T>.Default.List не так ясно (говорится, что он использует «средство сравнения по умолчанию, как определено реализацией объекта метода IEquatable<T>.Equals для T», которое не объясняет, что произойдет, если ононе реализует IEquatable), но я подозреваю, что это то же самое.

Это будет использовать реализацию IEquatable<T>, если ее реализует тип, или просто обычные Object.Equals и Object.GetHashCode (которые могутбыть переопределенным).

2 голосов
/ 14 декабря 2010

Согласно этим статьям , если только ваш объект не реализует IEquatable, используется Object.Equals.

2 голосов
/ 14 декабря 2010

Это требует личного теста.:)

Написать тест, составить список с одним фиктивным объектом, выполнить .Contains ().

Теперь проверьте фиктивный объект - вызывался ли .Equals ()?Как насчет хеш-значения?

1 голос
/ 14 декабря 2010

Существует перегрузка Contains, которая принимает IEqualityComparer, поэтому вы можете бросить свой собственный.

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