8

String.EqualsC#では、2つの文字列をと比較して。を指定できますStringComparison

私は最近、古語法の比較方法を更新しようToLower()としています。これは、すべての言語/文化で機能するとは限らないことを読んだためです。

私の知る限り、比較タイプは、最初に表示する必要があるリストを含むリストに直面したときの順序を決定するために使用されますae一部の文化では順序が異なります)。

を使用string.Equalsすると、順序付けは重要ではありません。したがって、オプションの多くは無関係であり、[Ordinal]と[Ordinal] IgnoreCaseのみが重要であると想定しても安全ですか?

String.EqualsのMSDN記事によると

ComparisonTypeパラメーターは、比較で現在のカルチャまたは不変のカルチャを使用するか、比較される2つの文字列の大文字と小文字を区別するか無視するか、または単語または順序の並べ替えルールを使用するかを示します。

string.Equals(myString, theirString, StringComparison.OrdinalIgnoreCase)

また、sortメソッドが内部でどのように機能するかを知りたいString.Compareのですが、2つの文字列の相対的な位置を計算するために使用されますか?

4

1 に答える 1

8

大文字と小文字を区別しない比較は、文化に依存します。たとえば、トルコの文化を使用する場合、iは小文字ではありませんI。その文化Iとは、とペアになりı、とİペアになりiます。ウィキペディアのドット付きおよびドットなしのIを参照してください。

文化に敏感な文字列操作に関連する奇妙な効果がいくつかあります。たとえば、"KonNy".StartsWith("Kon")を返すことができfalseます。

したがって、一見無害な操作であっても、文化に影響されない操作に切り替えることをお勧めします。


また、文化に影響されない操作でも、同じグリフの複数の表現、同じように見える異なるコードポイント、一部の操作では無視されるが他の操作では観察されるゼロ幅の文字など、Unicodeには直感的でない動作がたくさんあります...

于 2012-08-21T15:10:57.863 に答える