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