2012-06-14 10 views
7

Dlaczego. NET sortuje znaki "+" i "^" w innej kolejności niż w ASCII table lub w jaki sposób SQL je sortuje.W jaki sposób .NET sortuj znaki specjalne?

W ASCII table „+” ma wartość 42 i „^” ma wartość 94, ale jeśli uruchomić kod tak:

var list = new List<string> { "+", "^", "!" }; 
list.Sort(); 

Lista będzie zawierać wartości w następującej kolejności:

{"!", "^", "+"}

Sortowanie LINQ generuje taki sam wynik. Czy ktoś może mi powiedzieć, jaki rodzaj .NET robi?

+1

Nie sortujesz znaków, sortujesz ciągi znaków. –

Odpowiedz

17

. NET nie używa ASCII, używa Unicode. Po przeprowadzeniu sortowania ciągów, .NET (domyślnie) używa reguł aktualnej kultury do sortowania. W tym przypadku reguły te wskazują, że "^" występuje przed "+". Można uzyskać wynik można oczekiwać za pomocą „porządkową” comparer wyrażenie:

var list = new List<string> { "+", "^", "!" }; 
list.Sort(StringComparer.Ordinal); // Order is "!", "+", "^" 
+0

+1. Niektóre linki do zasad sortowania można znaleźć w mojej odpowiedzi na podobne pytanie - http://stackoverflow.com/questions/9475535/order-of-punctuation-marks-vs-letters/9475570#9475570 –

2

ta jest definiowana przez obecnego zestawu kultury, określonej w nieruchomości CompareInfo. Każda kultura ma specyficzne dla kultury reguły sortowania strun.