回答:
インバリアントカルチャは、変更されないために役立つ特別なカルチャです。現在のカルチャーは、ユーザーごとに、または実行ごとに変わる可能性があるため、同じであることに依存することはできません。
たとえばシリアル化など、いくつかのフローでは毎回同じカルチャを使用できることが非常に重要です。あるカルチャでは1,1の値を、別のカルチャでは1.1の値を使用できます。2番目のカルチャで "1,1"値を解析しようとすると、解析は失敗します。ただし、インバリアントカルチャを使用して数値を文字列に変換し、後で任意のカルチャセットを持つ任意のコンピューターから解析することができます。
// Use some non-invariant culture.
CultureInfo nonInvariantCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = nonInvariantCulture;
decimal dec = 1.1m;
string convertedToString = dec.ToString();
// Simulate another culture being used,
// following code can run on another computer.
nonInvariantCulture.NumberFormat.NumberDecimalSeparator = ",";
decimal parsedDec;
try
{
// This fails because value cannot be parsed.
parsedDec = decimal.Parse(convertedToString);
}
catch (FormatException)
{
}
// However you always can use Invariant culture:
convertedToString = dec.ToString(CultureInfo.InvariantCulture);
// This will always work because you serialized with the same culture.
parsedDec = decimal.Parse(convertedToString, CultureInfo.InvariantCulture);
System.Globalization
名前空間にあります。
CultureInfo.InvariantCulture
同じカルチャーでシリアル化したために使用する場合は、使用するのと同じではありませんCultureInfo.CurrentCulture
か?
CultureInfo.InvariantCulture
、を使用して常に10進数に構文解析できることがわかりますCultureInfo.InvariantCulture
。を使用CultureInfo.CurrentCulture
してシリアル化する場合、ユーザーは現在のカルチャとして「en-US」を使用している可能性があります。それを解析して10進数に戻す次のユーザーは、区切り記号として「、」を使用する現在のカルチャを持っている可能性があります。
定義された行動を伴う英語に基づく偽の文化。たとえば、ユーザーが定義したカルチャに関係なく読み書きできるように、構成ファイルにデータを書き込むのに最適です。
基本的に、それは人工的で変化しない特定の文化です。
これは、文化に関係なく同じものに使用されます(適切な文化Xに翻訳する必要はありません)。
例として-https://msdn.microsoft.com/en-us/library/4c5zdc6a(v = vs.100).aspx。ユーザーがいじり回してはならないアプリ固有のファイルを書き出すときは、カルチャパラメーターを受け取るすべてのメソッドにInvariantCultureを使用する必要があります。
上記のリンクされたドキュメントごとに注意してください:
ただし、アプリケーションは、ファイルに永続化されるデータのフォーマットや解析など、カルチャに依存しない結果を必要とするプロセスに対してのみ、インバリアントカルチャを使用する必要があります。
インバリアントカルチャはカルチャに依存しません。英語に関連付けられていますが、国/地域には関連付けられていません。
CultureInfo.InvariantCultureは、インバリアントカルチャのインスタンスを取得します。カルチャを必要とするSystem.Globalization名前空間のほとんどすべてのメソッドで使用できます。
CompareInfo、DateTimeFormat、NumberFormatなどのプロパティによって返されるオブジェクトは、インバリアントカルチャの文字列比較とフォーマット規則も反映しています。InvariantCultureプロパティは、文化に依存しない形式で永続データを表示する場合に便利です。
たとえば、アプリケーションの現在のカルチャとは関係なく、数値または日時を特定の形式で表示する場合は、CultureInfo.InvariantCultureを使用できます。
これは、ユニバーサルでシンプルな非地域固有の英語およびその他の関連情報です。それはプログラミング言語自体の言語のようなものです。ユニバーサルカレンダーを設定する際には、これを利用できます。コントローラ名、URL、デリゲート名などを生成する必要がある状況では... すべてのユーザー間で自然かつ普遍的に行動するためのものが必要です。