Lors du traitement des entrées utilisateur, il est crucial d'éviter les erreurs de conversion de type lorsque l'utilisateur saisit par exemple quelque chose qui n'est pas un chiffre dans TextBox. Cela est pertinent pour garantir la robustesse de l'application.
Historique de la question :
Dans VB6 et VB.NET, les erreurs de conversion (par exemple, via CInt ou Val) entraînaient des situations de plantage. Plus tard, des moyens plus sûrs, tels que Integer.TryParse, ont été introduits.
Problème :
Lorsque l'on essaie de convertir des données incorrectes (lettres, caractères spéciaux, chaîne vide), les méthodes standard (CInt, CDbl) lancent une exception. En conséquence, l'application peut se fermer de manière inattendue.
Solution :
Pour une conversion sûre, utilisez TryParse. Elle renvoie un booléen indiquant le succès de l'opération de conversion de chaîne en nombre et empêche les exceptions.
Exemple de code :
Dim input As String = TextBox1.Text Dim number As Integer If Integer.TryParse(input, number) Then MessageBox.Show($"Vous avez saisi le nombre : {number}") Else MessageBox.Show("Erreur : saisie non numérique") End If
Caractéristiques clés :
TryParse ne lance pas d'exception en cas d'échecQue renverra la fonction Val("123abc") et pourquoi cela peut-il être dangereux ?
Val("123abc") renverra 123, en ignorant les caractères non numériques après le chiffre, ce qui entraîne des erreurs si l'utilisateur a accidentellement saisi un caractère superflu.
Peut-on convertir une chaîne vide avec CInt("") ?
Non, la fonction lancera une exception InvalidCastException.
Quel approche choisir pour les nombres à virgule flottante en tenant compte de la localisation ?
Utilisez Double.TryParse avec un CultureInfo spécifié, car dans certaines localisations, la virgule , est le séparateur de la partie décimale, alors que dans d'autres, c'est le point ..
Dim value As Double Dim isParsed = Double.TryParse("3,14", NumberStyles.Any, CultureInfo.CurrentCulture, value)
Val pour obtenir un nombre avec un résultat non contrôléCInt sans vérifier le contenuLe développeur convertit directement le texte du champ en nombre : Dim n = CInt(TextBox1.Text) sans vérification.
Avantages :
Inconvénients :
Utilisation de TryParse avec notification à l'utilisateur sur une saisie incorrecte (voir exemple ci-dessus).
Avantages :
Inconvénients :