Кто-нибудь может привести пример, демонстрирующий использование инвариантной культуры ? Я не понимаю, что описывает документация.
Кто-нибудь может привести пример, демонстрирующий использование инвариантной культуры ? Я не понимаю, что описывает документация.
Ответы:
Инвариантная культура - это особая культура, которая полезна, потому что она не изменится. Текущая культура может меняться от одного пользователя к другому или даже от одного запуска к другому, поэтому вы не можете полагаться на то, что он останется прежним.
Возможность использовать одну и ту же культуру каждый раз очень важна для нескольких потоков, например, для сериализации: вы можете иметь значение 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);
System.Globalization
пространстве имен.
CultureInfo.InvariantCulture
работает, потому что вы сериализовали с той же культурой .... тогда разве это не то же самое, что использование CultureInfo.CurrentCulture
?
CultureInfo.InvariantCulture
то вы знаете, что вы всегда сможете разобрать обратно в десятичную с использованием CultureInfo.InvariantCulture
. Если вы используете CultureInfo.CurrentCulture
для сериализации, ваш пользователь может иметь «en-US» в качестве своей текущей культуры. У следующего пользователя, который переходит к анализу до десятичного числа, может существовать текущая культура, которая использует «,» для разделителя.
Поддельная культура, основанная на английском языке с определенным поведением. Отлично, например, записывать вещи в конфигурационные файлы, чтобы их можно было читать и записывать независимо от культуры, определенной пользователем.
По сути, это особая культура, которая является искусственной и не изменится .
Он используется для вещей, которые одинаковы, независимо от культуры (это не нужно переводить в какую-то культуру 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, имена делегатов ... и т. д. и нужны вещи, чтобы действовать естественно и универсально среди всех пользователей.