1. ホーム
  2. .net

[解決済み] 不変の文化とは?

2022-04-21 01:29:30

質問

の使い方を示す例をどなたか教えてください。 不変の文化 ? ドキュメントに記載されている内容が理解できないのですが。

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

不変の文化とは、変わらないからこそ役に立つ特別な文化です。現在のカルチャーはユーザーごとに、あるいは実行ごとに変わる可能性があり、同じであることを当てにすることはできません。

毎回同じカルチャを使用できることは、いくつかのフローで非常に重要です。たとえばシリアライゼーションでは、あるカルチャでは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);