¿Por qué string.Compare parece manejar caracteres acentuados de manera inconsistente?

Si ejecuto la siguiente sentencia:

string.Compare("mun", "mün", true, CultureInfo.InvariantCulture)

El resultado es '-1', lo que indica que 'mun' tiene un valor numérico más bajo que 'mün'.

Sin embargo, si ejecuto esta declaración:

string.Compare("Muntelier, Schweiz", "München, Deutschland", true, CultureInfo.InvariantCulture)

Obtengo '1', indicando que 'Muntelier, Schewiz' debería ir en último lugar.

¿Es este un error en la comparación? O, más probablemente, ¿hay alguna regla que deba tener en cuenta al ordenar las cadenas que contienen acentos?

La razón por la que esto es un problema es que estoy ordenando una lista y luego haciendo un filtro binario manual que pretende que todas las cadenas comiencen con 'xxx'.

Anteriormente estaba usando el método Linq 'Where', pero ahora tengo que usar esta función personalizada escrita por otra persona, porque él dice que funciona mejor.

Pero la función personalizada no parece tener en cuenta las reglas de "unicode" que tiene .NET. Entonces, si le digo que filtre por 'mün', no encontrará ningún elemento, aunque haya elementos en la lista que comiencen por 'mun'.

Esto parece ser debido a la ordenación inconsistente de los caracteres acentuados, dependiendo de qué caracteres van después del carácter acentuado.

OK, creo que he solucionado el problema.

Antes del filtro, hago una clasificación basada en la primeran letras de cada cuerda, donden es la longitud de la cadena de búsqueda.

Respuestas a la pregunta(3)

Su respuesta a la pregunta