Действительно ли CultureInfo.CurrentCulture необходим в String.Format ()? - PullRequest
25 голосов
/ 24 января 2009

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

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

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

или просто

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

Ответы [ 4 ]

30 голосов
/ 24 января 2009

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

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

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

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

19 голосов
/ 24 января 2009

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

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

6 голосов
/ 24 января 2009

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

4 голосов
/ 24 января 2009

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

...