Lorsque les nombres, les dates et les heures sont formatés en chaînes ou analysés à partir de chaînes, une culture est utilisée pour déterminer comment cela est fait. Par exemple, dans la en-US
culture dominante , vous avez ces représentations sous forme de chaîne:
- 1,000,000.00 - un million avec une fraction à deux chiffres
- 29/1/2013 - date de l'affichage
Dans ma culture ( da-DK
), les valeurs ont cette représentation sous forme de chaîne:
- 1.000.000,00 - un million avec une fraction à deux chiffres
- 29-01-2013 - date de cet affichage
Dans le système d'exploitation Windows, l'utilisateur peut même personnaliser le formatage des nombres et des dates / heures et peut également choisir une autre culture que la culture de son système d'exploitation. La mise en forme utilisée est le choix de l'utilisateur qui doit être ainsi.
Ainsi, lorsque vous formatez une valeur à afficher pour l'utilisateur en utilisant par exemple ToString
ou String.Format
ou analysée à partir d'une chaîne en utilisant DateTime.Parse
ou, Decimal.Parse
la valeur par défaut est d'utiliser leCultureInfo.CurrentCulture
. Cela permet à l'utilisateur de contrôler le formatage.
Cependant, une grande partie du formatage et de l'analyse des chaînes ne sont en fait pas des chaînes échangées entre l'application et l'utilisateur mais entre l'application et certains formats de données (par exemple un fichier XML ou CSV). Dans ce cas, vous ne souhaitez pas utiliser, CultureInfo.CurrentCulture
car si le formatage et l'analyse sont effectués avec des cultures différentes, ils peuvent être interrompus. Dans ce cas, vous souhaitez utiliser CultureInfo.InvariantCulture
(qui est basé sur la en-US
culture). Cela garantit que les valeurs peuvent aller-retour sans problème.
La raison pour laquelle ReSharper vous avertit est que certains auteurs d'applications ne sont pas conscients de cette distinction qui peut conduire à des résultats inattendus, mais ils ne le découvrent jamais car leur CultureInfo.CurrentCulture
est en-US
qui a le même comportement queCultureInfo.InvariantCulture
. Cependant, dès que l'application est utilisée dans une autre culture où il est possible d'utiliser une culture pour la mise en forme et une autre pour l'analyse, l'application peut être interrompue.
Donc pour résumer:
- Utilisation
CultureInfo.CurrentCulture
(valeur par défaut) si vous formatez ou analysez une chaîne utilisateur.
- Utilisation
CultureInfo.InvariantCulture
si vous formatez ou analysez une chaîne qui doit être analysable par un logiciel.
- Utilisez rarement une culture nationale spécifique car l'utilisateur est incapable de contrôler la façon dont le formatage et l'analyse sont effectués.