У меня есть коллекция классов с полями
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;
}
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники