Por que string.Compare parece lidar com caracteres acentuados de forma inconsistente?
Se eu executar a seguinte declaração:
string.Compare("mun", "mün", true, CultureInfo.InvariantCulture)
O resultado é '-1', indicando que 'mun' tem um valor numérico menor que 'mün'.
No entanto, se eu executar esta declaração:
string.Compare("Muntelier, Schweiz", "München, Deutschland", true, CultureInfo.InvariantCulture)
Eu recebo '1', indicando que 'Muntelier, Schewiz' deve durar.
Isso é um bug na comparação? Ou, mais provavelmente, existe uma regra que eu deveria levar em conta ao classificar strings contendo sotaque
A razão pela qual isso é um problema é que estou classificando uma lista e, em seguida, fazendo um filtro binário manual para obter todas as seqüências começando com 'xxx'.
Anteriormente eu estava usando o método Linq 'Where', mas agora eu tenho que usar essa função personalizada escrita por outra pessoa, porque ele diz que tem um desempenho melhor.
Mas a função personalizada não parece levar em conta as regras do 'unicode' que o .NET possui. Então, se eu disser para filtrar por 'mün', ele não encontrará nenhum item, mesmo que haja itens na lista começando com 'mun'.
Isso parece ser devido à ordem inconsistente de caracteres acentuados, dependendo de quais caracteres vão após o caractere acentuado.
OK, acho que consertei o problema.
Antes do filtro, eu faço um tipo baseado no primeiron letras de cada corda, onden é o comprimento da string de pesquisa.