# Convertir cadena a entero
Hay varios métodos disponibles para convertir explícitamente un string
a un integer
, como:
Pero todos estos métodos arrojarán un FormatException
, si la cadena de entrada contiene caracteres no numéricos. Para esto, necesitamos escribir un manejo de excepción adicional (try..catch
) para tratarlos 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 evitamos esto?
Como se dijo anteriormente, para manejar las excepciones generalmente 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, usando el try..catch
en todas partes no será una buena práctica, y puede haber algunos escenarios en los que queríamos dar 0
si la entrada es incorrecta, (Si seguimos el método anterior, debemos asignar 0
a convertedInt
del bloque catch). Para manejar tales escenarios podemos hacer uso de un método especial llamado .TryParse()
.
El .TryParse()
método que tiene un manejo de excepciones interno, que le dará la salida al out
y devuelve un valor booleano que indica el estado de la conversión (true
si la conversión fue exitosa; false
si falla). Según el valor devuelto, podemos determinar el estado de conversión. Veamos un ejemplo:
Uso 1: Almacene el valor devuelto en una variable booleana
int convertedInt; // Be the required integer
bool isSuccessConversion = int.TryParse(inputString, out convertedInt);
Podemos comprobar la variable isSuccessConversion
después de la Ejecución para verificar el estado de la conversión. Si es falso entonces el valor de convertedInt
será 0
(no es necesario verificar el valor de retorno si desea 0
por error de conversión).
Uso 2: Comprueba 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 devuelto, puede usar lo siguiente, si no le importa el valor devuelto (convertido o no, 0
estará bien)
int.TryParse(inputString, out convertedInt);
// use the value of convertedInt
// But it will be 0 if not converted