Действительно ли CultureInfo.CurrentCulture необходим в String.Format()?

StackOverflow https://stackoverflow.com/questions/475383

Вопрос

Как, по вашему мнению, действительно необходимо обеспечить IFormatProvider в методе String.Format(string, object) ?

Лучше ли написать полный вариант

String.Format(CultureInfo.CurrentCulture, "String is {0}", str);

или просто

String.Format("String is {0}", str);

?

Это было полезно?

Решение

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

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

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

Явное указание CurrentCulture (значение по умолчанию, если аргумент IFormatProvider опущен), по сути, является документацией, которая демонстрирует, что вы учли вышеизложенное и что генерируемая строка должна использовать культуру текущего пользователя.Вот почему FxCop рекомендует вам указать аргумент IFormatProvider.

Другие советы

Если вы не укажете IFormatProvider (или, что эквивалентно , передать null) большинство типов аргументов в конечном итоге будут отформатированы в соответствии с CultureInfo.CurrentCulture.Что становится интересным, так это то, что вы можете указать пользовательский IFormatProvider это может дать первый толчок к форматированию аргументов или переопределить культуру форматирования в зависимости от другого контекста.

Обратите внимание , что CultureInfo.CurrentCulture влияет на форматирование аргумента, а не на выбор ресурса;выбор ресурса контролируется CultureInfo.CurrentUICulture.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top