2012-06-14 22 views
7

¿Por qué .NET ordena los caracteres '+' y '^' en un orden diferente al que aparecen en ASCII table o la forma en que SQL los ordena.¿Cómo clasifica .NET caracteres especiales?

En ASCII table '+' tiene un valor de 42 y '^' tiene un valor de 94, pero si ejecuta código como este:

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

La lista contendrá los valores en el siguiente orden:

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

La clasificación LINQ genera el mismo resultado. ¿Puede alguien decirme qué tipo de ordenación hace .NET?

+1

No está ordenando los caracteres, está ordenando cadenas. –

Respuesta

17

.NET no utiliza ASCII, usa Unicode. Cuando realiza una clasificación de cadenas, .NET (de forma predeterminada) usa las reglas de la cultura actual para ordenar. En este caso, esas reglas indican que "^" viene antes de "+". Usted puede obtener el resultado que espera mediante el uso de la "ordinal" comparador cadena:

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

+1. Algunos enlaces a las reglas de clasificación se pueden encontrar en mi respuesta a una pregunta similar: http://stackoverflow.com/questions/9475535/order-of-punctuation-marks-vs-letters/9475570#9475570 –

2

Esto se define por el conjunto de la cultura actual, se define en la propiedad CompareInfo. Cada cultura tiene reglas de clasificación específicas de cada cultura para las cadenas.