Controllare se i dati sono numerici
Si riprenda l'esercizio "Accumulare valori per calcolare un totale" e lo si modifichi controllando che i dati inseriti siano, ove necessario, numerici. Si può ad esempio impiegare la funzione IsNumeric, introdotta in nell'esercizio "Un semplice calcolo del consumo di un auto".
Un altro sistema di controllo impiega il metodo TryParse. Ad esempio, sia blnNumeric una variabile di tipo Boolean, strNumero una variabile String e dblNumero una variabile Double. Il codice blnNumeric = Double.TryParse(strNumero, dblNumero) assegna a blnNumeric il valore True se strNumero contiene una stringa che rappresenta un numero Double, False in caso contrario. Eseguendo con una struttura If un test sul contenuto di blnNumeric si riesce quindi a determinare se il dato contenuto in strNumero può essere convertito in un valore di tipo Double. In caso affermativo il metodo TryParse effettua la conversione ed assegna il valore corrispondente alla variabile dblNumero. Ad esempio si avrebbe il seguente codice:
strNumero = "325,23" |
blnNumeric = Double.TryParse(StrNumero, dblNumero) |
If blnNumeric Then |
dblNumero = dblNumero + 1 'Posso effettuare calcoli con dblNumero
|
Else |
MessageBox("La stringa non contiene un numero")
|
End If |
Un sistema più generale di controllo degli errori impiega la struttura Try Catch. Con riferimento all'esempio precendente, si consideri il seguente codice:
strNumero = "325,23" |
Try |
dblNumero = CDb(strNumero) 'Anche dblNumero = Double.Parse(strNumero) va bene
|
dblNumero = dblNumero + 1
|
Catch ex As Exception |
MessageBox("La stringa non contiene un numero")
|
End Try |
In questo caso dopo il Try si inseriscono le istruzioni che si desidera controllare. Nel caso si verifichi un errore, o più propriamente una eccezione, l'esecuzione passa al quanto contenuto nel blocco Catch. Nel nostro caso, se la conversione di strNumero in un numero Double non riesce, allora viene visualizzato il messaggio di avviso.
Le eccezioni possono essere di diverse tipo: Exception indica un'eccezione generica, ArithmeticException un'eccezione di calcolo numerico, InvalidCastException e FormatException eccezioni di conversione errata. E' inoltre possibile inserire più blocchi Catch per gestire più eccezioni di tipo diverso.
Si esegua l'esercizio provando i diversi metodi illustrati.