Entwickler-Ecke

Basistechnologien - List.Sort/OrderBy liefert ein merkwürdiges Ergebnis


Navrim - Di 07.06.16 19:12
Titel: List.Sort/OrderBy liefert ein merkwürdiges Ergebnis
Hallo zusammen,

Ich habe ein Problem mit der Sortierung einer Liste.
Meine Liste ist vom generisch Typ Data, was eigene Klasse mit folgenden Attributen ist:


C#-Quelltext
1:
2:
3:
4:
string artikelBezeichnung
double preis1
double preis2
double preis3


Die Sortierung der double Werte ist sehr merkwürdig und erfolgt mittels der Sort-Methode und Lambda-Ausdrücken


C#-Quelltext
1:
2:
list.Sort((x, y) => x.preis1.CompareTo(y.preis1)); //asc
list.Sort((x, y) => -1*x.preis1.CompareTo(y.preis1)); //desc

Die Sortierung der anderen double Werte ist analog zu diesem Beispiel.

Leider wird die Liste nicht so sortiert, wie ich es gerne hätte.

Ein kleiner Auszug aus der aufsteigend sortierten Liste:

1.1
1.2
1.9
11.8
19.99
124.8
2.9
26.7
26.8
289.8
3.8
3.9
55.78
.
.
.
usw


Die OrderBy Funktion mittels LinQ liefert das gleiche Ergebnis.
Habe es auch schon mit delegates versucht, was selbstverständlich auch das gleiche Ergebnis zurückliefert.

Ich hätte allerdings gerne eine komplett aufsteigend bzw. absteigend sortierte Liste.
Wie schaffe ich es die Liste so zu sortieren, wie ich es gerne hätte?

Gruß Navrim


Christian S. - Di 07.06.16 19:55

Also wenn das so sortiert wird, werden da sehr wahrscheinlich Strings verglichen. Bist Du Dir ganz sicher, dass die Preise vom Typ double sind und Du nach den richtigen Eigenschaften sortierst?


Ralf Jansen - Di 07.06.16 20:26

Wenn es kein Typproblem ist (string anstatt Zahlentyp) dann erzähl mal ~wo~ du dir die sortierte Liste anschaust. Möglicherweise wird die List<T> ja richtig sortiert nur das Ding das du zum Ansehen der Liste nutzt sortiert selber auch noch ;)


Navrim - Di 07.06.16 20:43

Also es ist sicher kein string ;). Auf diese Idee kam ich auch schon.

Zurzeit wird es in einem ListView angezeigt. Ich habe mir die Liste gerade beim debuggen angeschaut und sie ist tatsächlich richtig sortiert.

Ralf das hat mir schon sehr geholfen, ich weiß jetzt wo ich suchen muss, ich danke dir :).


erfahrener Neuling - Mi 08.06.16 08:31

@Navrim
Du musst beim ListView die Eigenschaft Sorting auf None setzen. Hatt' ich letztens erst das selbe Problem :)