Se eseguire l'istruzione seguente:Perché string.Compare sembra gestire i caratteri accentati in modo incoerente?
string.Compare("mun", "mün", true, CultureInfo.InvariantCulture)
Il risultato è '-1', indicando che 'mun' ha un valore numerico inferiore 'Mün'.
Tuttavia, se eseguo questa dichiarazione:
string.Compare("Muntelier, Schweiz", "München, Deutschland", true, CultureInfo.InvariantCulture)
ottengo '1', indicando che 'Muntelier, Schewiz' dovrebbe andare scorso.
Si tratta di un bug nel confronto? O, più probabilmente, c'è una regola dovrei prendere in considerazione durante l'ordinamento stringhe contenenti accentati
Il motivo di questo è un problema è, sto ordinamento di un elenco e poi fare un filtro binario manuale che è destinata per ottenere ogni stringa che inizia con 'xxx'.
In precedenza stavo usando il metodo Linq 'Dove', ma ora devo usare questa funzione personalizzata scritta da un'altra persona, perché dice che funziona meglio.
Ma la funzione personalizzata non sembra prendere in considerazione le regole "unicode" di .NET. Quindi se dico di filtrare per 'mün', non trova alcun elemento, anche se ci sono elementi nella lista che iniziano con 'mun'.
Questo sembra essere a causa dell'ordine incoerente di caratteri accentati, a seconda di quali caratteri vanno dopo il carattere accentato.
OK, penso di aver risolto il problema.
prima del filtro, faccio una specie in base ai primi n lettere di ogni stringa, dove n è la lunghezza della stringa di ricerca.
E 'momenti come questo che vorrei che il .NET Framework era open-source, quindi ho potuto semplicemente passare in modalità debug e capire esattamente cosa sta facendo. – Jonathan
@jonathanconway: è possibile passare al codice sorgente della libreria di classi base, vedere http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net- framework-source-code.aspx –
@divo Grazie per il riferimento. Non ho mai realizzato che fosse possibile! – Jonathan