Ändern List.Contains Verhalten
-
21-08-2019 - |
Frage
Ich habe einen List<MyObj>
mit dem class MyObj : IComparable
. Ich schrieb die Methode CompareTo
in der MyObj
Klasse pro dem IComparable
Schnittstelle, aber wenn ich die List<MyObj>.Contains(myObjInstance)
verwende es gibt false
wenn es true
werden soll.
Ich bin nicht sicher, ich bin zu verstehen, wie ich vorgehen muss, um sicherzustellen, dass die List
verwendet meine benutzerdefinierten Vergleichsmethode, wenn dann Contains
Funktion aufrufen.
Hier ist meine compareTo Implementierung:
#region IComparable Members
public int CompareTo(object obj)
{
MyObj myObj = (MyObj)obj;
return String.Compare(this.Symbol, myObj.Symbol, true);
}
#endregion
Beachten Sie die Symbol-Eigenschaft ist eine Zeichenfolge.
Um zu klären, ich habe einen Haltepunkt in dieser Methode compareTo setzen und es nicht einmal dort geht.
Wer hat jemals versucht das?
Danke.
Lösung
Die absolute einfachste Weg, um herauszufinden, ob Ihr CompareTo Methode aufgerufen wird, ist ein Haltepunkt in sie zu setzen und drücken Sie F5 Ihr Programm auszuführen. Aber ich glaube, dass List<T>.Contains
sucht nach der IEquatable<T>
Schnittstelle für den Vergleich machen.
Andere Tipps
Nach dem Dokumentation List<T>.Contains
, verwendet er entweder Ihre Implementierung von IEquatable
Schnittstelle oder object.Equals
, dass Sie auch außer Kraft setzen können.
Haben Sie versucht, die Equals-Methode überschrieben?
List<T>
, nach Reflektor verwendet EqualityComparer<T>
für Rückhaltung zu überprüfen und die Standardimplementierung (ObjectEqualityComparer) verwendet für die meisten normalen Objekte entspricht.