Подтвердить что ты не робот

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

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

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

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

или просто

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

?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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