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-UScultura 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, ToStringou String.Formatou analisado uma string usando DateTime.Parseou Decimal.Parseo 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.CurrentCultureporque, 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-UScultura). 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.CurrentCulturesão eles en-USque 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.InvariantCulturese 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.