Sospetto che nell'ultimo caso "-" venga trattato in modo diverso a causa di impostazioni specifiche della cultura (forse come un "trattino" in contrapposizione a "meno" nelle prime stringhe). MSDN warns su questi:
Il comparatore utilizza la lingua corrente per ottenere specifici cultura informazioni quali regole involucro e l'ordine alfabetico singoli caratteri. Ad esempio, una cultura potrebbe specificare che alcune combinazioni di caratteri siano trattate come un singolo carattere, o caratteri maiuscoli e minuscoli essere confrontati in un modo particolare, o che l'ordinamento di un carattere dipende dai caratteri che precedono o seguilo.
vedi anche in this MSDN page:
.NET Framework utilizza tre modi distinti di cernita: ordinamento di parola, stringa di ordinamento e ordinamento ordinale. Ordinamento di parole esegue un confronto di stringhe con la lingua sensibile . Alcuni caratteri non alfanumerici possono avere pesi speciali assegnati a ; ad esempio, il trattino ("-") potrebbe assegnargli un peso molto ridotto in modo che "coop" e "co-op" vengano visualizzati uno accanto all'altro in un elenco ordinato. L'ordinamento delle stringhe è simile all'ordinamento delle parole , tranne per il fatto che non ci sono casi speciali; pertanto, tutti i simboli non anfanumerici precedono tutti i caratteri alfanumerici. Ordinamento ordinale confronta le stringhe in base ai valori Unicode di ciascun elemento della stringa.
Quindi, il trattino ottiene un trattamento speciale nella modalità di ordinamento predefinita per rendere la parola più "naturale".
È possibile ottenere "normale" tipo ordinale se specificamente accende:
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
per ordinare la raccolta originale utilizzando uso confronto ordinale:
items.Sort(StringComparer.Ordinal);
fonte
2012-02-20 01:20:58
Grazie Jared, potresti dirmi come posso ordinare se i dati sono in una colonna di DataTable 'DataTable dataTable = new DataTable(); dataTable.Columns.Add ("Articolo", typeof (stringa)); dataRow = dataTable.NewRow(); dataRow ["Articolo"] = "a-a"; dataTable.Rows.Add (dataRow); dataRow = dataTable.NewRow(); dataRow ["Item"] = "a.a"; dataTable.Rows.Add (dataRow); DataRow [] rows = dataTable.Select ("", "Item ASC"); ' – Satya