Что такое Инвариантная культура?

Может ли кто-нибудь дать пример, чтобы продемонстрировать использование Инвариантная культура? Я не понимаю, что описывает документация.

Ответ 1

Инвариантная культура - это особая культура, которая полезна, потому что она не изменится. Текущая культура может меняться от одного пользователя к другому или даже от одного запуска к другому, поэтому вы не можете полагаться на него, оставаясь тем же самым.

Возможность использовать одну и ту же культуру каждый раз очень важна в нескольких потоках, например, сериализация: вы можете иметь 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);

Ответ 2

Поддельная культура, основанная на английском языке с определенным поведением. Замечательно записывать, например, файлы в файлы конфигурации, чтобы их можно было читать и писать независимо от культуры, которую пользователь определил.

В основном это искусственная культура, а не изменится.

Ответ 3

Он используется для вещей, которые одинаковы независимо от культуры (что не нужно переводить в какую-либо культуру X, чтобы быть подходящей)

как для примера - https://msdn.microsoft.com/en-us/library/4c5zdc6a(v=vs.100).aspx. Когда вы выписываете файл приложения, к которому пользователь не должен возиться, вы должны использовать InvariantCulture для всех методов, которые принимают параметр культуры.

Обратите внимание, что в документах, связанных выше:

Однако приложение должно использовать культуру инварианта только для процессов, для которых требуются независимые от культуры результаты, такие как форматирование и анализ данных, которые сохраняются в файле.

Ответ 4

Инвариантная культура нечувствительна к культуре; он связан с английским языком, но не с какой-либо страной/регионом. Вы можете использовать инвариантную культуру для чувствительных к культуре операций строки, на которые не влияют соглашения текущей культуры потоков и которые совместимы между культурами.

CultureInfo.InvariantCulture извлекает экземпляр инвариантная культура. Он может использоваться практически любым способом в System.Globalization, которое требует культуры. Объекты возвращаемые свойствами, такими как CompareInfo, DateTimeFormat и NumberFormat также отражает сравнение строк и форматирование условностей инвариантной культуры.

В отличие от данных, чувствительных к культуре, которые могут быть изменены пользователем настройки или обновлениями .NET Framework или операционной система, данные инвариантной культуры стабильны с течением времени и через установленных культур и не могут быть настроены пользователями. Это делает особенно полезной для операций, требующих независимые от культуры результаты, такие как операции форматирования и разбора которые сохраняют форматированные данные или операции сортировки и упорядочения, которые требуют, чтобы данные отображались в фиксированном порядке независимо от культуры.

Свойство InvariantCulture подходит, когда вы хотите отображать сохраняемые данные в независимом от культуры формате.

Например, если вы хотите отображать число или дату-время в определенном формате, независимо от текущей культуры приложения, вы можете использовать CultureInfo.InvariantCulture.