У меня есть коллекция классов с полями
Serial
{
...
public long? KinopoiskId { get; set; }
public long? WorldArtkId { get; set; }
...
}
Одно из этих полей может быть null (уточнение: гарантировано может быть только одно поле null). Я написал IEqualityComparer:
public class SerialsEqualityComparer : IEqualityComparer<Serial>
{
public bool Equals(Serial x, Serial y)
{
if (x?.KinopoiskId != null)
{
if (y?.KinopoiskId != null)
{
return x.KinopoiskId == y.KinopoiskId;
}
}
if (y?.WorldArtId != null)
{
return x != null && x.WorldArtId == y.WorldArtId;
}
return false;
}
public int GetHashCode(Serial obj)
{
eturn obj.GetHashCode();
}
}
Но так не удалось удалить дубликаты, как это можно сделать?
Если вы используете метод .Distinct() для фильтрации или ему подобные, то для их работы необходимо корректное переопределение метода GetHashCode(), так как Distinct работает создавая коллекцию типа Set (Сначала сравнивает по хэшу, а затем методом Equals, если найдено совпадение).
Переопределить можно, например, так -
public int GetHashCode(Serial obj)
{
unchecked
{
int hash = 17;
hash = hash * 23 + obj?.KinopoiskId ?? 0;
hash = hash * 23 + obj?.WorldArtId ?? 0;
return hash;
}
}
Продвижение своими сайтами как стратегия роста и независимости