Ejercicio: Examen del método TryParse()
- 12 minutos
Al trabajar con datos, a veces necesitará convertir datos de cadena en un tipo de datos numérico. Tal como ha aprendido en la unidad anterior, el tipo de datos String puede contener un valor no numérico, por lo que es posible que se produzca un error en tiempo de ejecución al convertir un tipo string en un tipo de datos numérico.
Por ejemplo, el código siguiente:
string name = "Bob";
Console.WriteLine(int.Parse(name));
Provoca la siguiente excepción:
System.FormatException: 'Input string was not in a correct format.'
Para evitar una excepción de formato, use el método TryParse() en el tipo de datos de destino.
Uso de TryParse()
El método TryParse() realiza varias acciones al mismo tiempo:
- Intenta analizar una cadena en el tipo de datos numérico indicado.
- Si se ejecuta correctamente, almacena el valor convertido en un parámetro out, que se explica en la sección siguiente.
- Devuelve un valor
boolpara indicar si la acción se ha podido realizar correctamente o no.
Podemos usar el valor booleano devuelto para realizar una acción en el valor (como llevar a cabo algún cálculo), o bien mostrar un mensaje si la operación de análisis no se ha realizado correctamente.
Nota
En este ejercicio, usamos el tipo de datos int, pero hay un método TryParse() similar disponible en todos los tipos de datos numéricos.
Parámetros de salida
Los métodos pueden devolver un valor o devolver "void", que significa que no devuelven ningún valor. Los métodos también pueden devolver valores mediante parámetros out, que se definen igual que cualquier parámetro de entrada, pero incluyen la palabra clave out.
Conversión de una cadena en un entero con TryParse()
Elimine o use el operador de comentario de línea
//para comentar todo el código de los pasos anteriores.Actualice el código en el editor de Visual Studio Code de la siguiente manera:
string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); }Examine esta línea de código:
if (int.TryParse(value, out result))Para llamar a un método con un parámetro
out, debe usar la palabra claveoutdelante de la variable que contiene el valor. El parámetrooutse asigna a la variableresulten el código(int.TryParse(value,out result). Después, puede usar el valor que contiene el parámetroouten el resto del código mediante la variableresult.El método
int.TryParse()devuelvetruesi se ha convertido con éxito la variablestringvalueen unaint; en caso contrario, devuelvefalse. Así pues, rodee la declaración con una declaraciónify, después, realice la lógica de decisión en consecuencia.El valor convertido se almacena en la variable
intresult. La variableintresultestá declarada e inicializada antes de esta línea de código, por lo que debería ser accesible tanto dentro de los bloques de código que pertenecen a las instruccionesifyelse, como fuera de ellos.La palabra clave
outindica al compilador que el métodoTryParse()no devuelve un valor de la manera tradicional (como valor devuelto), sino que también comunica una salida a través de este parámetro bidireccional.Al ejecutar el código, debería ver la siguiente salida:
Measurement: 102
Utilice más adelante el int analizado en el código
Para demostrar que la variable
resultdeclarada anteriormente se rellena mediante el parámetroouty que también se puede usar más adelante en el código, actualice el código en el editor de Visual Studio Code de la siguiente manera:string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } Console.WriteLine($"Measurement (w/ offset): {50 + result}");En el menú Archivo Visual Studio Code, seleccione Guardar. El archivo Program.cs debe guardarse antes de compilar o ejecutar el código.
En el panel EXPLORADOR, para abrir un terminal en la ubicación de la carpeta TestProject, haga clic con el botón derecho en TestProject y seleccione abrir en terminal integrado. Debe abrirse un panel de terminal y debe incluir un símbolo del sistema que muestre que el terminal está abierto en la ubicación de la carpeta TestProject.
En el símbolo del sistema del terminal, para ejecutar el código, escriba dotnet run y presione Entrar.
Nota
Si ve un mensaje que indica "No se ha podido encontrar un proyecto para ejecutar", asegúrese de que el símbolo del sistema del terminal muestra la ubicación de carpeta TestProject prevista. Por ejemplo:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Debería ver el siguiente resultado:
Measurement: 102 Measurement (w/ offset): 152Examine la última línea de código del ejemplo anterior,
Console.WriteLine($"Measurement (w/ offset): {50 + result}");, dado que la variableresultse define fuera de la instrucción if, se puede acceder a ella más adelante en el código.
Modificación de la variable de cadena a un valor que no se pueda analizar
Por último, echemos un vistazo al otro escenario, en el que damos intencionadamente a TryParse() un valor incorrecto que no se pueda convertir en int.
Modifique la primera línea de código; para ello, reinicialice la variable
valuea un valor diferente.string value = "bad";Además, modifique la última línea de código para asegurarse de que el resultado sea mayor que "0" antes de mostrar el segundo mensaje.
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");El ejemplo de código debería coincidir ahora totalmente con el siguiente código:
string value = "bad"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");Guarde el archivo de código y use Visual Studio Code para ejecutar el código. Obtendrá el siguiente resultado:
Unable to report the measurement.Examine las dos últimas líneas de código agregadas en el ejemplo anterior.
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");Puesto que
resultse define fuera de la instrucciónif, se puede acceder aresultmás adelante en el código fuera de los bloques de código. Por lo tanto, se puede comprobar que haya enresultun valor mayor que cero antes de permitir queresult+ desplazamiento se escriba como salida. La comprobación de que el valor deresultsea mayor que cero evita imprimir un valor de desplazamiento después del mensajeUnable to report the measurement..
Resumen
El método TryParse() es una herramienta muy útil. Estas son algunas ideas clave que conviene recordar.
- Use
TryParse()para convertir una cadena en un tipo de datos numérico. TryParse()devuelvetruesi la conversión se realiza correctamente; de lo contrario, devuelvefalse.- Los parámetros de salida proporcionan un medio secundario para que un método devuelva un valor. En este caso, el parámetro
outdevuelve el valor convertido. - Use la palabra clave
outpara pasar un argumento a un método que ha definido un parámetroout.