Инвариантная культура - это особая культура, которая полезна, потому что она не изменится. Текущая культура может меняться от одного пользователя к другому или даже от одного запуска к другому, поэтому вы не можете полагаться на то, что он останется прежним.
Возможность использовать одну и ту же культуру каждый раз очень важна для нескольких потоков, например, для сериализации: вы можете иметь значение 1,1 в одной культуре и 1,1 в другой. Если вы попытаетесь разобрать значение «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);