@Alexsbr

Как правильно сравнить на равенство 2 коллекции с помощью IEqualityComparer?

Вопрос к знатокам. Например я хочу сравнить 2 коллекции на равенство. Использую для этого IEqualityComparer. Он обязывает нас реализовать методы Equals и GetHashCode.
Например есть 2 коллекции объектов User (с полями Name и Age). Буду их сравнивать.
Для этого написал такой компаратор:

public class Comparer : IEqualityComparer<User>
    {

        public bool Equals(User x, User y)
        {
            if (x != null && y != null && x.Name == y.Name && x.Age == y.Age)
            {
                return true;
            }
            else
            {
                return false;
            }

        }

        public int GetHashCode(User obj)
        {
            if (Object.ReferenceEquals(obj, null))
            {
                return 0;
            }

            int hashProductName = obj.Name == null ? 0 : obj.Name.GetHashCode();

            int hashProductCode = obj.Age.GetHashCode();
            return hashProductName ^ hashProductCode;
        }


И потом вызываю SequenceEqual чтобы сравнить коллецкии (set1 и set2 - наши коллекции с User):
bool result= set1.SequenceEqual(set2, new Comparer());

Вопрос в том, что когда смотрю в дебаге в GetHashCode программа никогда не заходит почему-то. Всё действо происходит в Equals.
Возникает вопрос , Зачем нужен этот метод? как его правильно заюзать в данном случае? Почему он не используется? Могу ли я как то на это повлиять?
  • Вопрос задан
  • 364 просмотра
Пригласить эксперта
Ответы на вопрос 1
Он нужен для хеширующих колекций, таких как Dictionary, HashSet
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы