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-USculture 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 ToStringou String.Formatou analysée à partir d'une chaîne en utilisant DateTime.Parseou, Decimal.Parsela 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.CurrentCulturecar 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-USculture). 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.CurrentCultureest en-USqui 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.