Wenn ich die folgende Anweisung ausführe:
string.Compare("mun", "mün", true, CultureInfo.InvariantCulture)
Das Ergebnis ist "-1", was bedeutet, dass "mun" einen niedrigeren numerischen Wert hat als "mün".
Wenn ich jedoch diese Anweisung ausführe:
string.Compare("Muntelier, Schweiz", "München, Deutschland", true, CultureInfo.InvariantCulture)
Ich erhalte eine "1", was bedeutet, dass "Muntelier, Schewiz" als letztes drankommen sollte.
Ist dies ein Fehler in dem Vergleich? Oder, was wahrscheinlicher ist, gibt es eine Regel, die ich berücksichtigen sollte, wenn ich Zeichenketten sortiere, die akzentuierte
Der Grund, warum dies ein Problem ist, ist, dass ich eine Liste sortiere und dann einen manuellen Binärfilter durchführe, der jede Zeichenfolge abrufen soll, die mit "xxx" beginnt.
Bisher habe ich die Linq-Methode "Where" verwendet, aber jetzt muss ich diese benutzerdefinierte Funktion verwenden, die von einer anderen Person geschrieben wurde, weil er sagt, dass sie besser funktioniert.
Aber die benutzerdefinierte Funktion scheint die 'Unicode'-Regeln von .NET nicht zu berücksichtigen. Wenn ich also sage, dass nach "mün" gefiltert werden soll, werden keine Einträge gefunden, obwohl es in der Liste Einträge gibt, die mit "mun" beginnen.
Dies scheint auf die inkonsistente Reihenfolge der akzentuierten Zeichen zurückzuführen zu sein, je nachdem, welche Zeichen auf das akzentuierte Zeichen folgen.
OK, ich glaube, ich habe das Problem gelöst.
Vor dem Filter führe ich eine Sortierung nach der ersten n Buchstaben der einzelnen Zeichenfolgen, wobei n ist die Länge des Suchstrings.