1. ホーム
  2. c#

[解決済み] InvariantCultureとOrdinalの文字列比較の違いについて

2022-03-15 18:59:20

質問

c#で2つの文字列を等価比較するとき、InvariantCultureとOrdinalの比較の違いは何ですか?

どのように解決するのですか?

不変性文化

標準的な文字順序(a,b,c, ...等)を使用します。 これは、特定のロケールが異なる順序で文字を並べ替えるのとは対照的です('a-with-acute' は または の後、ロケールによっては 'a' の後、など)。

序文

一方、純粋に文字を表すバイトの値だけを見ます。


に素晴らしいサンプルがあります。 http://msdn.microsoft.com/en-us/library/e6883c06.aspx には、様々な StringComparison の値の結果が表示されています。 最後のほうにずっと、(抜粋)表示されています。

StringComparison.InvariantCulture:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is less than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)

StringComparison.Ordinal:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is greater than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)

InvariantCulture が (U+0069, U+0049, U+00131) となるところ、Ordinal は (U+0049, U+0069, U+00131) となることがわかる。