Зачем нужно указывать культуру в преобразовании строк?

Resharper предупреждает меня, что мне нужно указать культуру строки при выполнении int.ToString()

Например:

int Value = Id.ToString(); // Where Id is an int

Является ли это просто resharper педантичным, или есть причина, по которой мне нужно дать настройку культуры для преобразования int в строку?

И если есть причина для этого - что лучше всего использовать, когда мой сайт используется по всему миру? Должно ли оно просто отражать настройки сервера, чтобы внутреннее преобразование было безопасно?

Ответ 1

Потому что, например, английские культуры используют '.' как десятичная точка, где, как французские культуры используют "," и наоборот, чтобы разделить тысячи. Указание культуры устраняет эту двусмысленность, так что код выполняется одинаково в операционных системах Windows, настроенных для разных языков, особенно если анализируемые значения передаются в постоянное хранилище.

Ответ 2

Причина в том, что строковое представление числа зависит от страны.

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

Перегрузка ToString без параметра использует текущую культуру, поэтому ваш выход будет зависеть от настроек компьютера.

Тем не менее, мое эмпирическое правило:

  • каждое внутреннее представление должно быть InvariantCulture (никогда не ретранслировать по настройкам сервера!)
  • все в презентации должно использовать локальный пользовательский интерфейс

Надеюсь, что это поможет