Laden...

Implementierung Interface IComparable: "CompareTo" wird nicht ausgeführt

Erstellt von ambientCS vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.608 Views
A
ambientCS Themenstarter:in
12 Beiträge seit 2010
vor 13 Jahren
Implementierung Interface IComparable: "CompareTo" wird nicht ausgeführt

Hallo 😃

Ich habe eine Implementierung von IComparable und das Problem, dass die implementierte Methode "CompareTo(obj, obj)" scheinbar nicht ausgeführt wird.

Konkret:
In meiner Hauptklasse wird in einer Schleife meine myAppointments ArrayList gefüllt. Anschließend rufe ich ein Sort() darauf aus.


...
this.myAppointments.Add(newAppointment);
}
this.myAppointments.Sort();

in der Klasse Appointment, die IComparable implementiert, sieht CompareTo so aus:

public int CompareTo(Appointment obj)
        {
           Appointment app2 = obj;            
           return DateTime.Compare(this.startTime, app2.startTime);

        }

Das Problem ist, dass CompareTo gar nicht aufgerufen wird. Die Liste bleibt unsortiert. Ich habe das eigentlich nach allen möglichen Tutorials aufgebaut, die ich finden konnte, aber es funktioniert nicht.
Weißt jemand Rat?
Danke im Voraus!

LG ambient

916 Beiträge seit 2008
vor 13 Jahren

Hast du mal versucht eine Instanz des Comparers mit rein zu stecken, die Sort Methode müsste so eine Überladung haben.

Again what learned...

Gelöschter Account
vor 13 Jahren

ps: arraylist gehört in die mottenkiste. verwende statt dessen List<T>

A
ambientCS Themenstarter:in
12 Beiträge seit 2010
vor 13 Jahren

Danke für die Tipps. Nach einigem Rumprobierten funktioniert's jetzt. Trotzdem noch fürs Verständnis:

Hast du mal versucht eine Instanz des Comparers mit rein zu stecken..

Müsste das nicht auch ohne funktionieren? Also nach dem Beispial aus dem Galileo OpenBook --> http://openbook.galileocomputing.de/csharp/kap28.htm

5.299 Beiträge seit 2008
vor 13 Jahren

das liegt evtl. anne ArrayList. Da die untypisiert ist, weiß die Sort-Methode nicht, dass die Daten IComparable sind.
bin mir aber nicht ganz sicher, weil (s. JAck30lena) ich ewig nix mehr damit gemacht hab.

Der frühe Apfel fängt den Wurm.

F
60 Beiträge seit 2010
vor 13 Jahren

entweder du implementierst IComparable<Appointment> und lässt deinen Code so stehen, oder du implementierst IComparable (implizit IComparable<Object>) und änderst die Signatur auf

public int CompareTo(Object o){}

Ansonsten wird CompareTo überladen und nicht überschrieben, allerdings sollte in dem fall auch ein compilerfehler auftreten, da das interface nicht erfüllt wurde.