En el manejo de la entrada del usuario, es crucial prevenir errores de conversión de tipos cuando, por ejemplo, el usuario ingresa algo que no es un número en un TextBox. Esto es relevante para asegurar la robustez del funcionamiento de la aplicación.
Historia de la pregunta:
En VB6 y VB.NET, los errores de conversión (por ejemplo, mediante CInt o Val) llevaban a situaciones de fallo. Posteriormente, aparecieron mecanismos más seguros, como Integer.TryParse.
Problema:
Al intentar convertir datos incorrectos (letras, caracteres especiales, cadena vacía), los métodos estándar (CInt, CDbl) lanzan una excepción. Como resultado, la aplicación puede cerrarse inesperadamente.
Solución:
Para una conversión segura, utiliza TryParse. Este retorna un éxito lógico de la operación de conversión de cadena a número y previene excepciones.
Ejemplo de código:
Dim input As String = TextBox1.Text Dim number As Integer If Integer.TryParse(input, number) Then MessageBox.Show($"Has ingresado el número: {number}") Else MessageBox.Show("Error: no se ingresó un número") End If
Características clave:
TryParse no lanza excepciones en caso de fallo¿Qué devolverá la función Val("123abc") y por qué puede ser peligroso?
Val("123abc") devolverá 123, ignorando los caracteres no numéricos después del número, lo que puede llevar a errores si el usuario accidentalmente ingresa un carácter adicional.
¿Se puede convertir una cadena vacía usando CInt("")?
No, la función lanzará una excepción InvalidCastException.
¿Qué enfoque elegir para números de punto flotante considerando la localización?
Utiliza Double.TryParse especificando CultureInfo, ya que en algunas localidades la coma , es el separador de la parte fraccionaria, mientras que en otras es el punto ..
Dim value As Double Dim isParsed = Double.TryParse("3,14", NumberStyles.Any, CultureInfo.CurrentCulture, value)
Val para obtener un número con resultados incontroladosCInt sin verificar el contenidoEl desarrollador convierte directamente el texto del campo a un número: Dim n = CInt(TextBox1.Text) sin comprobar.
Ventajas:
Desventajas:
Se usa TryParse con notificación al usuario sobre una entrada incorrecta (ver ejemplo arriba).
Ventajas:
Desventajas: