Коли числа, дати та час відформатовані у рядки або проаналізовані з рядків, використовується культура, щоб визначити, як це робиться. Наприклад, у домінуючій 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
якщо ви форматуєте чи розбираєте рядок, який повинен бути синтаксичний за допомогою програмного забезпечення.
- Рідко використовуйте певну національну культуру, оскільки користувач не може контролювати, як здійснюється форматування та аналіз.