Su código se ejecuta para mí, sin FormatException
(una vez a capitalizar el método correctamente):
string value = "01";
int i = int.Parse(value);
pero esto suena un timbre de edad; un problema que tuve hace años, que Microsoft aceptó como un error contra los componentes de localización de Windows (no .NET). Para probar si estás viendo esto, ejecute este código y nos permiten saber si se obtiene una FormatException:
string value = "0"; // just a zero
int i = int.Parse(value);
EDITAR: aquí está mi puesto de Usenet, de nuevo en 2007. A ver si los síntomas coinciden con los suyos .
Como referencia, esto es lo que encontramos. La máquina afectada tenía datos incorrectos para el valor de registro [HKEY_CURRENT_USER \ Panel de control \ International \ sPositiveSign]. Normalmente, este valor es un REG_SZ vacío (cadena terminada en nulo). En este caso, a la cadena le faltaba su terminador . Esto confundió la función de API GetLocaleInfoW(), causando que pensara que '0' (número cero ASCII) era el signo positivo para el escenario actual (normalmente debería ser '+'). Esto causó todo tipo de estragos.
Esto se puede comprobar por sí mismo con regedit.exe: abrir ese valor reg por el botón derecho sobre el valor y seleccionar 'Modificar datos binarios'. Usted debe ver dos puntos a la derecha (que representa el terminador nulo). Si no ve puntos, se verá afectado. Solucionarlo agregando un terminador (cuatro ceros ).
También puede consultar el valor de CultureInfo.CurrentCulture.NumberFormat.PositiveSign; debe ser '+'.
Es un error en la localización de Windows API, no en las librerías de clase. El valor reg debe verificarse para un terminador . Lo están mirando.
... y here's a report on Microsoft Connect sobre el tema:
Su código de ejemplo funciona muy bien para mí (si cambio a analizar Analizar). –
puede usar 'int.Parse (value, Culture.InvariantCulture)' – Sebastian
A menudo un cero delante significa que el número está en Octal (base 8). ¿La cadena '" 020 "' pretende ser '20' (base 10) o' 16' (base 10)? – Dai