Когда числа, даты и время форматируются в строки или анализируются из строк, для определения того, как это делается, используется культура. Например, в доминирующей en-US
культуре у вас есть эти строковые представления:
- 1 000 000,00 - один миллион с двузначной дробью
- 29.01.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
IS , en-US
который имеет такое же поведение , как CultureInfo.InvariantCulture
. Тем не менее, как только приложение используется в другой культуре, где существует вероятность использования одной культуры для форматирования, а другой для анализа приложения, может произойти сбой.
Итак, подведем итог:
- Используйте
CultureInfo.CurrentCulture
(по умолчанию), если вы форматируете или анализируете строку пользователя.
- Используйте,
CultureInfo.InvariantCulture
если вы форматируете или анализируете строку, которая должна быть проанализирована программным обеспечением.
- Редко используйте определенную национальную культуру, потому что пользователь не может контролировать, как выполняется форматирование и анализ.