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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top