IEnumerable<T>.Except() z moim własnym porównaniem

IEnumerable<T>.Except() z moim własnym porównaniem
NS
  • Rejestracja:prawie 10 lat
  • Ostatnio:29 dni
  • Postów:30
0

Hej,

W jednym miejscu swojego kodu mam coś takiego:

List<string> _added = changed.AffectedMIDs.Except(orginal.AffectedMIDs).ToList();

orginal.AffectedMIDs i changed.AffectedMIDs to List<string> i działa to tak jak powinno. Porównuje mi dwie listy i w _added znajdują się tylko elementy które znajdują się w changed.AffectedMIDs ale nie ma ich w orginal.AffectedMIDs.

Coś bardzo podobnego próbuje zrobić później, niestety zamiast List<string> mam List<T>. Except może jako drugi argument przyjąć IEqualityComparer. Ostatecznie wylądowałem z czymś takim:

List<FollowerItem> _followers = orginal.Followers.Except(changed.Followers, new FollowerComperer()).ToList<FollowerItem>();

Kopiuj
    public class FollowerComperer : IEqualityComparer<FollowerItem>
    {

        public bool Equals(FollowerItem x, FollowerItem y)
        {
            return x.Email == y.Email;
        }

        public int GetHashCode(FollowerItem obj)
        {
            return obj.GetHashCode();
        }
    }

Niestety nie działa. Próbowałem wrzucić breakpointa w Equals, ale niestety tez mi tam nie wskakuje ale to chyba normalne, bo nie można lambdy tak debugować.

Jakieś pomysły?

Mateusz Całka
  • Rejestracja:prawie 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:5
3

Nie wchodzi Ci do Equals bo GetHashCode zwraca różne wyniki, dla różnych FollowerItem. Twoje GetHashCode nie spełnia warunku, że dla dwóch obiektów uznawanych za takie same musi zwracać jednakowy wynik.

NS
  • Rejestracja:prawie 10 lat
  • Ostatnio:29 dni
  • Postów:30
0

Dokładnie. Teraz śmiga.
Dziękuję bardzo!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.