Warum scheint string.Compare Zeichen mit Akzenten inkonsistent zu behandeln?

Wenn ich die folgende Anweisung ausführe:

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

Das Ergebnis ist '-1', was anzeigt, dass 'mun' einen niedrigeren numerischen Wert als 'mün' hat.

Wenn ich jedoch diese Anweisung ausführe:

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

Ich bekomme '1', was anzeigt, dass 'Muntelier, Schewiz' als letztes gehen soll.

Ist das ein Fehler im Vergleich? Oder gibt es eine Regel, die ich beim Sortieren von Zeichenfolgen mit Akzenten berücksichtigen sollte?

Der Grund dafür ist, dass ich eine Liste sortiere und dann einen manuellen Binärfilter durchführe, der jede Zeichenfolge abrufen soll, die mit 'xxx' beginnt.

Früher habe ich die Linq 'Where'-Methode verwendet, jetzt muss ich diese benutzerdefinierte Funktion verwenden, die von einer anderen Person geschrieben wurde, da sie nach eigenen Angaben eine bessere Leistung erbringt.

Die benutzerdefinierte Funktion scheint jedoch die Unicode-Regeln von .NET nicht zu berücksichtigen. Wenn ich ihn nach 'mün' filtern lasse, werden keine Einträge gefunden, obwohl die Liste Einträge enthält, die mit 'mun' beginnen.

Dies scheint auf die inkonsistente Reihenfolge der Zeichen mit Akzent zurückzuführen zu sein, je nachdem, welche Zeichen nach dem Zeichen mit Akzent stehen.

OK, ich denke, ich habe das Problem behoben.

Vor dem Filter sortiere ich nach dem erstenn Buchstaben jeder Zeichenfolge, won ist die Länge der Suchzeichenfolge.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage