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

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>();

    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?

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.

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1