Вопрос к знатокам. Например я хочу сравнить 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.
Возникает вопрос , Зачем нужен этот метод? как его правильно заюзать в данном случае? Почему он не используется? Могу ли я как то на это повлиять?