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
Hast du mal versucht eine Instanz des Comparers mit rein zu stecken, die Sort Methode müsste so eine Überladung haben.
Again what learned...
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
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.
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.