C#Sviluppo

A cosa serve il Try-Catch in C#

try-catch in C#

Il try-catch è uno strumento indispensabile per sviluppatori e utenti, i quali potranno avere programmi affidabili e con schermate di errori comprensibili.

Come sarebbe il mondo senza try-catch? Sicuramente un disastro (almeno per chi usa il linguaggio C#…). Questa istruzione, in Visual C#, permette di gestire le cosiddette eccezioni. Esse non sono altro che i possibili errori durante l’esecuzione di un programma, che se non accuratamente preveduti possono dare origine a fastidiose schermate di errore con la conseguente interruzione totale del programma.

Il blocco si divide in due parti: try e catch. La prima contiene le istruzioni che potrebbero generare le eccezioni, chiamate in inglese Exception; la seconda serve ad intercettarle, cioè a prevederle e ad agire di conseguenza.

Per cosa posso usarlo?

Per qualsiasi blocco di istruzioni che può generare degli errori durante l’esecuzione. Può rivelarsi molto utile per convertire le eccezioni in semplici schermate di errore o in blocchi di codice per risolverlo automaticamente. Ad esempio, è possibile prevedere cosa fare se un file che viene richiesto non è disponibile, se un’operazione di cast non è valida (conversione di una variabile da un tipo ad un altro) e tanto altro ancora.

Un esempio comune è la divisione per zero, che causa all’interno della CPU una Exception hardware.

Come utilizzare il try-catch

La sintassi del Try-Catch è riassunta qui in basso.

dove all’interno del blocco try è contenuto l’insieme di istruzioni che potrebbero generare l’eccezione, mentre all’interno del blocco catch sono presenti: il nome dell’eccezione tra parentesi e la soluzione all’interno delle parentesi graffe.

La divisione per zero

Qui di seguito è riportato un programma di esempio su console che permette di fare delle semplici divisioni. Il risultato è contenuto all’interno della variabile decimale c. Come abbiamo già detto, la divisione per zero genera un’eccezione. Per chi non lo sapesse, la funzione Console.ReadLine() ripone in una stringa di testo tutto ciò che l’utente scrive, dovrà poi essere convertita in formato numerico.

Effettuando la divisione per zero (inserendo un primo numero a caso e il secondo 0), il programma si interrompe e torna su Visual Studio, fornendo il nome dell’eccezione da utilizzare nel blocco catch. Ciò accade, ovviamente, solo in fase di sviluppo.

Eccezione senza try-catch in C#
Schermata che riporta il nome di eccezione e il messaggio di errore

Durante la normale esecuzione (come quella da parte di un utente), appare una banale schermata ricca di indicazioni per gli sviluppatori, ma di difficile comprensione per l’utilizzatore. Peggio ancora, l’applicazione potrebbe direttamente chiudersi senza fornire alcun messaggio.

Errore senza intercettazione con try-catch in C#
Schermata di errore generica di Exception non intercettato.

Soluzione

Basterà inserire un try con all’interno l’istruzione che genera l’eccezione (magari anche la scrittura del risultato per non dover mettere un if-else dopo) e un catch con l’exception e una stringa di errore.

E’ possibile anche ripetere la procedura di input (ovviamente spostata all’interno di una funzione esterna) richiamandola nel blocco catch.

Messaggio Automatico

Per acquisire il messaggio direttamente dall’eccezione, così come appare in Visual Studio, basterà cambiare il blocco try-catch in questo modo


Referenze