は、私は次の文を実行した場合:string.Compareがアクセント付きの文字を一貫して扱えないのはなぜですか?
string.Compare("mun", "mün", true, CultureInfo.InvariantCulture)
結果は「-1」、「三菱UFJニコスは、」「ムン」より低い数値を持っていることを示しています。しかし
、私はこの文を実行した場合:
string.Compare("Muntelier, Schweiz", "München, Deutschland", true, CultureInfo.InvariantCulture)
私は 'ムンテリアー、Schewizは' 最後に行くべきであることを示し、 '1' を取得します。
これは比較のバグですか?または、より多くの可能性が、これは、私はリストを、問題をソートしていますし、その後、意味の取扱説明書バイナリフィルタをやっている理由は、アクセント
を含む文字列をソートするとき、私は考慮に入れてしなければならないルールがあります'xxx'で始まるすべての文字列を取得します。
私はLinq 'Where'メソッドを使用していましたが、今は他の人が作成したこのカスタム関数を使用する必要があります。
しかし、カスタム関数は、.NETが持つ「ユニコード」のルールを考慮していないようです。だから私が 'mun'でフィルタするように言うなら、 'mun'で始まるリストに項目があっても、それは何の項目も見つけられません。
これは、アクセント付きの文字の後にどの文字が来るかによって、アクセント付きの文字の順序が矛盾しているためです。
問題は解決したと思います。
はフィルタの前に、私はのnは、検索文字列の長さである各文字列の最初のn 手紙に基づいて並べ替えを行います。
を比較していることは、私は、.NET Frameworkを望むこのような瞬間ですオープンソースだったので、私はデバッグモードでステップを踏んで、何をしているのかを正確に把握することができました。 – Jonathan
@jonathanconway:基本クラスライブラリのソースコードを実行することは可能です。http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-japan/ framework-source-code.aspx –
@divo参考になりました。これが可能であることは決して実現しなかった! – Jonathan