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% 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:
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.
Tatsächlich ist dieses Thema sogar in der Dokumentation enthalten: Ссылка .
Tags und Links linq distinct c#-3.0 custom-compare