Buscar..


Convertir cadena a entero

Hay varios métodos disponibles para convertir explícitamente una string a un integer , como:

  1. Convert.ToInt16();

  2. Convert.ToInt32();

  3. Convert.ToInt64();

  4. int.Parse();

Pero todos estos métodos lanzarán una FormatException , si la cadena de entrada contiene caracteres no numéricos. Para esto, necesitamos escribir un manejo de excepciones adicional ( try..catch ) para tratarlas en tales casos.


Explicación con ejemplos:

Entonces, dejemos que nuestra entrada sea:

string inputString = "10.2";

Ejemplo 1: Convert.ToInt32()

int convertedInt = Convert.ToInt32(inputString); // Failed to Convert 
// Throws an Exception "Input string was not in a correct format."

Nota: Lo mismo ocurre con los otros métodos mencionados, a saber: Convert.ToInt16(); y Convert.ToInt64();

Ejemplo 2: int.Parse()

int convertedInt = int.Parse(inputString); // Same result "Input string was not in a correct format.

¿Cómo sorteamos esto?

Como se dijo anteriormente, para manejar las excepciones, usualmente necesitamos un try..catch como se muestra a continuación:

try
{
    string inputString = "10.2";
    int convertedInt = int.Parse(inputString);
}
catch (Exception Ex)
{
    //Display some message, that the conversion has failed.         
}

Pero, usar try..catch todas partes no será una buena práctica, y puede haber algunos escenarios en los que quisiéramos dar 0 si la entrada es incorrecta (si seguimos el método anterior, debemos asignar 0 a convertedInt desde el bloque de captura). Para manejar tales escenarios podemos hacer uso de un método especial llamado .TryParse() .

El método .TryParse() tiene un manejo interno de Excepciones, que le dará la salida al parámetro de out y devuelve un valor booleano que indica el estado de la conversión ( true si la conversión fue exitosa; false si falló). Según el valor de retorno, podemos determinar el estado de conversión. Veamos un ejemplo:

Sintaxis 1: almacena el valor de retorno en una variable booleana

 int convertedInt; // Be the required integer
 bool isSuccessConversion = int.TryParse(inputString, out convertedInt);

Podemos verificar la variable isSuccessConversion después de la ejecución para verificar el estado de la conversión. Si es falso, el valor de convertedInt será 0 (no es necesario verificar el valor de retorno si desea que 0 un error de conversión).

Sintaxis 2: compruebe el valor de retorno con if

if (int.TryParse(inputString, out convertedInt))
{
    // convertedInt will have the converted value
    // Proceed with that
}
else 
{
 // Display an error message
}

Uso 3: Sin verificar el valor de retorno, puede usar lo siguiente, si no le importa el valor de retorno (convertido o no, 0 estará bien)

int.TryParse(inputString, out convertedInt);
// use the value of convertedInt
// But it will be 0 if not converted


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow