Nella gestione dell'input dell'utente è fondamentale prevenire errori di conversione dei tipi quando l'utente, ad esempio, inserisce un non numero in TextBox. Questo è cruciale per garantire la robustezza dell'applicazione.
Storia della questione:
In VB6 e VB.NET gli errori di conversione (ad esempio, utilizzando CInt o Val) portavano a situazioni di arresto anomalo. Successivamente sono stati introdotti mezzi più sicuri, come Integer.TryParse.
Problema:
Quando si tenta di convertire dati non validi (lettere, simboli speciali, stringhe vuote), i metodi standard (CInt, CDbl) sollevano un'eccezione. Di conseguenza, l'applicazione può andare in crash.
Soluzione:
Per una conversione sicura, utilizzare TryParse. Restituisce un successo logico nell'operazione di conversione di stringa in numero e previene eccezioni.
Esempio di codice:
Dim input As String = TextBox1.Text Dim number As Integer If Integer.TryParse(input, number) Then MessageBox.Show($"Hai inserito il numero: {number}") Else MessageBox.Show("Errore: non è stato inserito un numero") End If
Caratteristiche principali:
TryParse non genera eccezioni in caso di insuccessoCosa restituirà la funzione Val("123abc") e perché potrebbe essere pericoloso?
Val("123abc") restituirà 123, ignorando i caratteri non numerici dopo il numero, il che porta a errori se l'utente ha accidentalmente inserito un carattere extra.
È possibile convertire una stringa vuota usando CInt("")?
No, la funzione solleverà un'eccezione InvalidCastException.
Qual è l'approccio da scegliere per i numeri in virgola mobile tenendo conto della localizzazione?
Usare Double.TryParse specificando CultureInfo, poiché in alcune località la virgola , è il separatore della parte frazionaria, in altre è il punto ..
Dim value As Double Dim isParsed = Double.TryParse("3,14", NumberStyles.Any, CultureInfo.CurrentCulture, value)
Val per ottenere un numero con risultati incontrollatiCInt senza controllare il contenutoLo sviluppatore converte direttamente il testo dal campo in numero: Dim n = CInt(TextBox1.Text) senza controllo.
Pro:
Contro:
Si utilizza TryParse con avviso all'utente su un input errato (vedi esempio sopra).
Pro:
Contro: