CultureInfo.InvariantCulture в.ToString()

В настоящее время я исправляю проблемы FxCop, поэтому я столкнулся с проблемой, когда я должен предоставить cultureinfo при преобразовании строки с использованием ToString(),

В настоящее время в моем коде ничего не передается как IFormatProvider, поэтому я прочитал несколько статей msdn, в которых говорится, что, если вы не передадите какое-либо значение для cultureinfo, оно назначит значение по умолчанию, а когда вы укажете CultureInfo в качестве InvariantCulture, оно не будет зависеть от какой-либо культуры.

Мой вопрос: "Являются ли default и CultureInfo.InvariantCulture одним и тем же? Могу ли я заменить весь мой код по умолчанию на InvariantCulture?"

Пример:

 int st = 123;
 String s = st.ToString(123); // this will be taken as default 
 String s = st.ToString(123, CultureInfo.InvariantCulture); // culture is specified externally 

Вторая и третья строки эквивалентны?

2 ответа

Является ли default и CultureInfo.InvariantCulture одним и тем же?

Нет, абсолютно нет. Культура по умолчанию зависит (изначально) от настроек операционной системы. Инвариантная культура должна быть "нейтральной" культурой.

Ваш пример 123 не очень хороший, потому что большинство (все?) Культур будут представлять целые числа одинаково - по крайней мере, пока вы не войдете в форматы с группировкой разделителей и т. Д. (Я не думаю, что.NET поддерживает неарабские цифры при форматировании целых чисел.)

Сравните это с форматированием десятичного значения, например:

decimal x = 123.45m;
Console.WriteLine(x.ToString()); // Might be 123,45
Console.WriteLine(x.ToString(CultureInfo.InvariantCulture)); // Always 123.45

Если вы запустите приведенный выше код, скажем, во Франции, по умолчанию будет французский язык, в котором в качестве десятичного разделителя используется запятая, поэтому он выведет "123,45".

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

Хотя культура по умолчанию изначально основана на настройках операционной системы, ее можно изменить с помощью Thread.CurrentCulture а также Thread.CurrentUICulture; последний используется для поиска переведенных ресурсов, тогда как первый используется для форматирования решений, подобных приведенным выше. Вы можете установить эти свойства в любом потоке, но обычно вы используете Thread.CurrentThread.CurrentCulture = ...

Нет, они не одинаковы.

Первый будет принимать региональные настройки с компьютера или настройки культуры из запущенного потока приложения.

Второй будет английский, согласно MSDN:

Инвариантная культура нечувствительна к культуре; это связано с английским языком, но не с какой-либо страной / регионом.

Другие вопросы по тегам