LinQ distinct mit benutzerdefiniertem Vergleich löscht Duplikate

8

Ich habe folgende Klassen:

%Vor%

Und ich verwende die folgende linq Abfrage:

%Vor%

Aber das distinct tut nicht, was ich will, wie der folgende Code zeigt:

%Vor%

Benutze ich das falsch? Warum werden sie nicht so verglichen, wie ich es vorschlage?

Bearbeiten: Um zu demonstrieren, dass der Vergleicher funktioniert, gibt das Folgende den Wert true zurück:

%Vor%     
NDM 25.10.2009, 13:48
quelle

2 Antworten

10

Ihr Problem ist, dass Sie IEqualityComparer nicht korrekt implementiert haben.

Wenn Sie IEqualityComparer<T> implementieren, müssen Sie implementieren GetHashCode , damit zwei gleiche Objekte denselben Hashcode haben.

Andernfalls erhalten Sie ein falsches Verhalten, wie Sie hier sehen.

Sie sollten GetHashCode folgendermaßen implementieren: (mit freundlicher Genehmigung von diese Antwort )

%Vor%

Sie müssen auch GetHashCode in SupplierCategory überschreiben, um konsistent zu sein. Zum Beispiel:

%Vor%

Schließlich sollten Sie, obwohl Sie dies nicht müssen, Equals in SupplierCategory überschreiben und dafür die Methode Equals aufrufen, die Sie für IEquatable implementiert haben.

    
SLaks 25.10.2009, 13:53
quelle
4

Tatsächlich ist dieses Thema sogar in der Dokumentation enthalten: Ссылка .

    
Alexandra Rusina 03.11.2009 00:51
quelle