CurrentCulture
とInvariantCulture
は、ともに特定のカルチャでの規則に基づいた比較を行う点では同じですが、CurrentCulture
では現在のカルチャに基づいた比較を行うのに対し、InvariantCulture
では特定の文化圏や言語に依存しないインバリアントカルチャに基づいた比較を行う点が異なります。
以下はString.Compareメソッドの結果を用いてこれらの違いを見るためのサンプルです。
スレッドのカルチャをen-US(英語/米国)に変更する前後の結果に注目してください。 InvariantCulture
での結果はどちらも変わらないのに対し、CurrentCulture
での結果は、スレッドのカルチャを変更する前後で異なっています。
これは、ja-JP(日本語/日本)の規則では漢字の読みによる並びとなっているために亜(あ)の方が井(い)より小さい(前に並ぶ)、つまり"亜<井"とされるのに対し、en-US(英語/米国)の規則では文字のコードポイントによる並びとなっているために、井(U+4E95)の方が亜(U+4E9C)よりも小さい(前に並ぶ)、つまり"亜>井"とされるためです。 そのため、CurrentCulture
による比較の結果は、カルチャがja-JPとen-USの場合で異なります。
一方、InvariantCulture
の場合は特定の言語に依存しない規則に基づいて比較されるため、カルチャがja-JPでもen-USでも井の方が亜よりも小さいというどちらも同じ結果となります。 (参考: 固有カルチャのデータの比較と並べ替え)
CurrentCultureIgnoreCase
とInvariantCultureIgnoreCase
の場合もこれと同様の動作となります。
カルチャによって異なる規則とその詳細についてはカルチャによる動作の違いとインバリアントカルチャ §.文字列比較の規則・ソート順定義(CompareInfo)としてのCurrentCultureを参照してください。 また、カルチャそのものに関してはカルチャの基本・種類・カルチャ情報の取得を参照してください。