Sospecho que en el último caso "-" se trata de una manera diferente debido a la configuración específica de la cultura (tal vez como un "guión" en lugar de "menos" en las primeras cadenas). MSDN warns en esto:
La comparación utiliza la cultura actual para obtener específico de la cultura información, como reglas carcasa y el orden alfabético de caracteres individuales. Por ejemplo, una cultura podría especificar que ciertas combinaciones de caracteres sean tratadas como un solo carácter, o mayúsculas y minúsculas comparadas de una manera particular, o que el orden de clasificación de un carácter dependa de los caracteres que preceden o Siguelo.
también vemos en this MSDN page:
El .NET Framework utiliza tres maneras distintas de clasificar: ordenar palabras, cadena de ordenar y ordenar ordinal. El tipo de palabra realiza una comparación sensible a la cultura de las cadenas. Ciertos caracteres no alfanuméricos pueden tener pesos especiales asignados a ellos; por ejemplo, el guión ("-") podría tener asignarle un peso muy pequeño para que "cooperativa" y "cooperativa" aparezcan juntas en una lista ordenada. El tipo de secuencia es similar al tipo de palabra , excepto que no hay casos especiales; por lo tanto, todos los símbolos no alfanuméricos aparecen antes que todos los caracteres alfanuméricos. La clasificación ordinal compara cadenas basadas en los valores Unicode de cada elemento de la cadena.
Por lo tanto, el guión recibe un tratamiento especial en el modo de ordenamiento predeterminado para que la palabra se ordene más "natural".
Usted puede obtener "normal" tipo ordinal si a su vez específicamente en:
Console.WriteLine(string.Compare("a.", "a-")); //1
Console.WriteLine(string.Compare("a.a", "a-a")); //-1
Console.WriteLine(string.Compare("a.", "a-", StringComparison.Ordinal)); //1
Console.WriteLine(string.Compare("a.a", "a-a", StringComparison.Ordinal)); //1
para ordenar la colección original usando ordinal utilización de comparación:
items.Sort(StringComparer.Ordinal);
Gracias Jared, ¿podría decirme cómo puedo ordenar si los datos están en una columna de DataTable? DataTable dataTable = new DataTable(); dataTable.Columns.Add ("Item", typeof (string)); dataRow = dataTable.NewRow(); dataRow ["Item"] = "a-a"; dataTable.Rows.Add (dataRow); dataRow = dataTable.NewRow(); dataRow ["Item"] = "a.a"; dataTable.Rows.Add (dataRow); DataRow [] rows = dataTable.Select ("", "Item ASC"); ' – Satya