CA1305: int.Parse (String)
-
13-09-2019 - |
Question
Je reçois un avertissement de CA1305.
Microsoft.Globalization: Parce que la comportement de « int.Parse (string) » pourrait varier en fonction du Les paramètres régionaux de l'utilisateur actuel, remplacer cet appel « _Default.CalculateImageButton_Click (objet, ImageClickEventArgs) » avec un appel à « Int.Parse (string, IFormatProvider). Si le résultat de « Int.Parse (string, IFormatProvider) » sera affiché à l'utilisateur, spécifiez « CultureInfo.CurrentCulture » comme paramètre 'IFormatProvider'. Dans le cas contraire, si le résultat sera stockées et accessibles par le logiciel, tels comme quand il est conservé sur le disque ou une base de données, spécifiez 'CultureInfo.InvariantCulture'.
Qu'est-ce exactement peut aller mal si j'omettez la spécification de la culture lors de l'analyse Int32?
La solution
Cela signifie que lorsque vous lisez « 1,234 » à partir d'un fichier de données ou l'enregistrement de base de données, puis essayez de le jeter à un Int via Parse, vous obtenez 1234 en Amérique et 1 en Allemagne. L'avertissement donne de bons conseils - si vous êtes en interaction avec l'utilisateur, spécifiez CurrentCulture (merci Andrew!), Et si vous êtes en interaction avec un système de fichiers ou base de données (ou quoi que ce soit utilisateur!), Utilisez InvariantCulture
Autres conseils
Si vous analysez un nombre entier, il peut avoir des séparateurs de milliers, ce qui peut être « » ou « » selon les paramètres régionaux.