Ändern Liste.Enthält Verhalten
Ich habe eine List<MyObj>
mit der class MyObj : IComparable
. Ich habe die Methode CompareTo
im MyObj
Klasse pro die IComparable
interface, aber wenn ich den List<MyObj>.Contains(myObjInstance)
es gibt false
sein, wenn es true
.
Ich bin mir nicht sicher, ich bin zu verstehen, wie muss ich Vorgehen, um sicherzustellen, dass die List
nutzt mein custom-Vergleich-Methode beim Aufruf dann Contains
Funktion.
Hier ist mein compareTo Umsetzung:
#region IComparable Members
public int CompareTo(object obj)
{
MyObj myObj = (MyObj)obj;
return String.Compare(this.Symbol, myObj.Symbol, true);
}
#endregion
Beachten Sie das Symbol-Eigenschaft ist ein string.
Zu klären, habe ich einen Haltepunkt in diese compareTo-Methode und es ist nicht einmal dort gehen.
Jemand mal ausprobiert?
Dank.
- Können Sie uns zeigen, Ihren code?
- Speziell die Implementierung von CompareTo
InformationsquelleAutor Lancelot | 2009-07-02
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die absolute einfachste Weg, um herauszufinden, ob deine CompareTo-Methode aufgerufen wird, um einen Haltepunkt zu setzen in, und drücken Sie F5, um das Programm auszuführen. Aber ich glaube, dass
List<T>.Contains
sieht für die, IEquatable<T>
Schnittstelle für den Vergleich.Entsprechend der Dokumentation für
List<T>.Contains
es verwendet entweder Ihre UmsetzungIEquatable
Schnittstelle oderobject.Equals
, dass Sie außer Kraft setzen können, wie gut.Haben Sie versucht, das überschreiben der Equals-Methode?
List<T>
laut Reflektor, verwendetEqualityComparer<T>
zu prüfen, Eindämmung, und die default-Implementierung (ObjectEqualityComparer) verwendet, Entspricht für die meisten normalen Objekten.