C # - не удается найти подтвержденный ответ для хэш-набора содержит проверку сравнения - PullRequest
3 голосов
/ 09 июня 2011

Я попытался выяснить, как C # сравнивает объекты в HashSet на равенство.

Я не смог ничего найти здесь: http://msdn.microsoft.com/en-us/library/bb359438.aspx

Только когда я пришел к stackoverflow, я прочитал, что он использует Equals () и возможно getHashCode ()

В любом случае я планировал реализовать оба метода, но мой вопрос:

Что бы вы сделали, чтобы узнать, как HashSet на самом деле сравнивает объекты?

1 Ответ

5 голосов
/ 09 июня 2011

Сравнивает объекты на равенство, используя Equals.Он определяет, в какое ведро их поместить, используя GetHashCode.

В более общем смысле, HashSet использует IEqualityComparer<T>, переданный в его конструктор, для выполнения обоих.Если ничего не указано, он использует EqualityComparer<T>.Default, который вызывает метод GetHashCode() и IEquatable<T>.Equals() объекта (или object.Equals(), если тип не реализует IEquatable<T>).

...