Beim Vergleichen von Zeichenfolgen in C# gibt es unter Windows 7 sp1 x64 andere Ergebnisse mit unterschiedlichen Ergebnissen. Hier ist ein Beispielcode:Unterschiedliche Sortierergebnisse bei verschiedenen CLR-Versionen
List<string> myList = new List<string>();
myList.AddRange(new[] { "!-", "-!", "&-l", "&l-", "-(", "(-", "-*", "*-", ".-", "-.", "/'", "-/" });
myList.Sort();
Console.WriteLine(Environment.Version);
myList.ForEach(Console.WriteLine);
Console.WriteLine();
Console.WriteLine(string.Compare("!-", "-!"));
Console.WriteLine("!-".CompareTo("-!"));
Hier wird die Probe Ausgabe:
Wenn ich festlegen Ziel Framework 4.0:
4.0.30319.18444
!-
-!
&l-
&-l
(-
-(
*-
-*
.-
-.
/'
-/
-1
-1
Wenn ich festlegen Ziel Framework 2.0 :
2.0.50727.5485
-!
!-
&-l
&l-
-(
(-
-*
*-
-.
.-
-/
/'
1
1
Fehle ich etwas?
In .NET 4.0 der Unicode von 5.0 auf 5.1 geändert, so ist das vielleicht der Unterschied. Leider gibt es sehr wenig Dokumentation zu diesem – xanatos
'List.Sort()' verwendet den Standardvergleich, und der Standardvergleich für 'string' verwendet die aktuelle Kultur. Dies hängt wiederum von den Kollationstabellen ab, die mit .NET geliefert werden, und diese können sich ändern. Wenn Sie konsistente Ergebnisse wünschen, verwenden Sie einen ordinalenbasierten Vergleich ('List.Sort (StringComparer.Ordinal)'). –
@JeroenMostert Das Problem ist sogar mit der InvariantCulture vorhanden, die "stabil" sein sollte – xanatos