Что такое инвариантная культура? - PullRequest
162 голосов
/ 11 марта 2010

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

Ответы [ 5 ]

120 голосов
/ 11 марта 2010

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

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

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

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

6 голосов
/ 11 марта 2010

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

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

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

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

3 голосов
/ 07 июля 2015

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

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

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

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

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

0 голосов
/ 05 января 2019

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

...