Votre code est exécuté pour moi, sans FormatException
(une fois que vous capitalisez la méthode appropriée):
string value = "01";
int i = int.Parse(value);
Mais cela ne sonne une vieille cloche; un problème que j'avais il y a des années, que Microsoft a accepté comme un bug contre les composants de localisation de Windows (pas .NET). Pour vérifier si vous voyez cela, exécutez ce code et laissez-nous savoir si vous obtenez un FormatException:
string value = "0"; // just a zero
int i = int.Parse(value);
EDIT: voici mon post de Usenet, de retour en 2007. Voir si les symptômes correspondent aux vôtres .
Pour référence, voici ce que nous avons trouvé. La machine affectée avait des données incorrectes pour la valeur de registre [HKEY_CURRENT_USER \ Control Panel \ International \ sPositiveSign]. Normalement, cette valeur est vide REG_SZ (chaîne terminée par un caractère nul). Dans ce cas, il manquait à la chaîne son terminateur . Cela a confondu la fonction API GetLocaleInfoW(), l'amenant à penser que '0' (numéro ASCII zéro) était le signe positif pour l'environnement local (il devrait normalement être '+'). Cela a causé toutes sortes de ravages.
Vous pouvez vérifier par vous-même avec regedit.exe: ouvrir cette valeur reg par clic droit sur la valeur et en sélectionnant «Modifier les données binaires. Vous devriez voir deux points sur la droite (représentant le terminateur null). Si vous ne voyez aucun point, vous êtes affecté. Fixez-le en ajoutant un terminateur (quatre zéros ).
Vous pouvez également vérifier la valeur de CultureInfo.CurrentCulture.NumberFormat.PositiveSign; il devrait être '+'.
C'est un bogue dans l'API de localisation Windows , pas les bibliothèques de classe. La valeur reg doit être vérifiée pour un terminateur . Ils le regardent.
... et here's a report on Microsoft Connect sur la question:
Votre exemple de code fonctionne très bien pour moi (si je change d'analyser parser). –
peut-être utiliser 'int.Parse (value, Culture.InvariantCulture)' – Sebastian
Souvent, un zéro initial signifie que le nombre est en octal (base 8). La chaîne '" 020 "' est-elle censée être '20' (base 10) ou' 16' (base 10)? – Dai