Когда числа, даты и время форматируются в строки или анализируются из строк, для определения того, как это делается, используется культура. Например. в доминирующей культуре en-US
у вас есть следующие строковые представления:
- 1 000 000,00 - один миллион с двузначной дробью
- 1/29/2013 - дата публикации
В моей культуре (da-DK
) значения имеют строковое представление:
- 1.000.000,00 - один миллион с двузначной дробью
- 29-01-2013 - дата публикации
В операционной системе Windows пользователь может даже настроить форматирование чисел и даты / времени, а также выбрать другую культуру, отличную от культуры его операционной системы. Используемое форматирование - выбор пользователя, каким он должен быть.
Таким образом, когда вы форматируете значение, которое будет отображаться для пользователя, например, ToString
или String.Format
или анализируется из строки, используя DateTime.Parse
или Decimal.Parse
, по умолчанию используется CultureInfo.CurrentCulture
. Это позволяет пользователю контролировать форматирование.
Тем не менее, большая часть форматирования и синтаксического анализа строк - это на самом деле не строки, которыми обмениваются приложение и пользователь, а между приложением и некоторым форматом данных (например, файлом XML или CSV). В этом случае вы не хотите использовать CultureInfo.CurrentCulture
, потому что, если форматирование и синтаксический анализ выполняются с разными культурами, он может сломаться. В этом случае вы хотите использовать CultureInfo.InvariantCulture
(который основан на культуре en-US
). Это гарантирует, что значения могут беспрепятственно возвращаться.
Причина, по которой ReSharper предупреждает вас, заключается в том, что некоторые авторы приложений не знают об этом различии, которое может привести к непредвиденным результатам, но они никогда не обнаруживают этого, потому что их CultureInfo.CurrentCulture
равен en-US
, который ведет себя так же, как CultureInfo.InvariantCulture
, Тем не менее, как только приложение используется в другой культуре, где существует вероятность использования одной культуры для форматирования, а другой для анализа, приложение может перестать работать.
Итак, подведем итог:
- Используйте
CultureInfo.CurrentCulture
(по умолчанию), если вы форматируете или анализируете пользовательскую строку.
- Используйте
CultureInfo.InvariantCulture
, если вы форматируете или анализируете строку, которая должна анализироваться программным обеспечением.
- Редко используйте определенную национальную культуру, потому что пользователь не может контролировать, как выполняется форматирование и анализ.