Wenn ich die folgende Anweisung ausführen:Warum scheint string.Compare Akzentzeichen nicht konsistent zu behandeln?
string.Compare("mun", "mün", true, CultureInfo.InvariantCulture)
Das Ergebnis ist ‚-1‘, was darauf hinweist, dass ‚mun‘ einen niedrigeren numerischen Wert als ‚Mün‘ hat.
Allerdings, wenn ich diese Anweisung ausführen:
string.Compare("Muntelier, Schweiz", "München, Deutschland", true, CultureInfo.InvariantCulture)
I '1' erhalten, was darauf hinweist, dass 'Muntelier, Schewiz' liest gehen soll.
Ist das ein Fehler im Vergleich? Oder, was wahrscheinlicher ist, ist es eine Regel sollte ich in Betracht nehmen, wenn Strings Sortierung mit Akzent enthält
Der Grund dafür ist ein Problem ist, ich bin eine Liste sortieren und dann eine manuelle Binärfilter zu tun, die gemeint ist um jeden String mit 'xxx' beginnen zu lassen.
Zuvor verwendete ich die Linq 'Where' Methode, aber jetzt muss ich diese benutzerdefinierte Funktion von einer anderen Person geschrieben verwenden, weil er sagt, dass es besser funktioniert.
Aber die benutzerdefinierte Funktion scheint nicht zu berücksichtigen, was auch immer Unicode-Regeln .NET hat. Wenn ich also sage, dass es nach 'mün' filtern soll, findet es keine Einträge, obwohl es in der Liste Einträge gibt, die mit 'mun' beginnen.
Dies scheint wegen der inkonsistenten Reihenfolge der Akzentzeichen, abhängig davon, welche Zeichen nach dem Akzentzeichen gehen.
OK, ich denke, ich habe das Problem behoben.
vor dem Filter, mache ich eine Art basierend auf den ersten n Buchstaben jeden Zeichenfolge, wo n die Länge des Suchbegriffs ist.
Es ist Momente wie diese, die ich das .NET Framework wünschen war Open-Source, also konnte ich einfach im Debug-Modus durchgehen und genau herausfinden, was es macht. – Jonathan
@jonathanconway: Das Durchlaufen des Quellcodes der Basisklassenbibliothek ist möglich, siehe http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net- framework-source-code.aspx –
@ divo Danke für die Referenz. Habe nie realisiert, dass das möglich war! – Jonathan