Quando números, datas e horas são formatados em cadeias ou analisados a partir de cadeias, uma cultura é usada para determinar como isso é feito. Por exemplo, na en-US
cultura dominante , você tem estas representações de string:
- 1.000.000,00 - um milhão com uma fração de dois dígitos
- 29/1/2013 - data desta postagem
Na minha cultura ( da-DK
), os valores têm esta representação em cadeia:
- 1.000.000,00 - um milhão com uma fração de dois dígitos
- 29-01-2013 - data desta postagem
No sistema operacional Windows, o usuário pode até personalizar como os números e a data / hora são formatados e também pode escolher outra cultura além da cultura do sistema operacional. A formatação utilizada é a escolha do usuário, como deve ser.
Portanto, quando você formata um valor a ser exibido ao usuário usando, por exemplo, ToString
ou String.Format
ou analisado uma string usando DateTime.Parse
ou Decimal.Parse
o padrão é usar o CultureInfo.CurrentCulture
. Isso permite que o usuário controle a formatação.
No entanto, muitas formatações e análises de strings não são trocadas entre o aplicativo e o usuário, mas entre o aplicativo e alguns formatos de dados (por exemplo, um arquivo XML ou CSV). Nesse caso, você não deseja usá-lo CultureInfo.CurrentCulture
porque, se a formatação e a análise forem feitas com diferentes culturas, elas poderão quebrar. Nesse caso, você deseja usar CultureInfo.InvariantCulture
(que é baseado na en-US
cultura). Isso garante que os valores possam percorrer sem problemas.
O motivo pelo qual o ReSharper avisa é que alguns criadores de aplicativos desconhecem essa distinção, o que pode levar a resultados indesejados, mas eles nunca descobrem isso porque CultureInfo.CurrentCulture
são eles en-US
que têm o mesmo comportamento CultureInfo.InvariantCulture
. No entanto, assim que o aplicativo é usado em outra cultura, existe a chance de usar uma cultura para formatação e outra para analisar o aplicativo.
Então, para resumir:
- Use
CultureInfo.CurrentCulture
(o padrão) se você estiver formatando ou analisando uma sequência de caracteres do usuário.
- Use
CultureInfo.InvariantCulture
se você estiver formatando ou analisando uma sequência que deve ser analisada por um software.
- Raramente use uma cultura nacional específica porque o usuário não consegue controlar como a formatação e a análise são feitas.