10

英語のみの文字列に関しては、同じことを考えStringComparison.OrdinalIgnoreCaseて実行しています。StringComparison.InvariantCultureIgnoreCaseただし、私が取り組んでいる次のコードではそうではありません。

// Returns 0
string.Compare("877495169FA05B9D8639A0EBC42022338F7D2324","‎877495169fa05b9d8639a0ebc42022338f7d2324", StringComparison.InvariantCultureIgnoreCase)

// Returns -1
string.Compare("877495169FA05B9D8639A0EBC42022338F7D2324","‎877495169fa05b9d8639a0ebc42022338f7d2324", StringComparison.OrdinalIgnoreCase)

特に理由はありますか?

4

1 に答える 1

25
"‎877495169fa05b9d8639a0ebc42022338f7d2324"

トリックの質問のように聞こえます。この文字列の先頭、最初の数字8の前に余分な文字があります。これはブラウザには表示されません。U + 200E、「左から右へのマーク」です。序数の比較ではその文字が表示され、不変の比較では無視されます。文字列でToCharArray()を使用すると、自分で確認できます。

その文字列を削除して、代わりにこれを貼り付けます。U+200Eを削除しました。

"877495169fa05b9d8639a0ebc42022338f7d2324"

また、Compare()メソッドは、本来のように0を返すようになりました。現在使用しているテキストエディタまたはIMEに注意してください。Unicodeは面白くないですか?

于 2013-03-23T01:49:24.377 に答える