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.
try
{
istruzione1;
istruzione2;
}
catch(ExceptionName)
{
soluzione1;
}
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.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int a, b;
float c;
string linea = Console.ReadLine(); // Leggi l'input
string lineb = Console.ReadLine(); // Leggi l'input
a = Convert.ToInt32(linea); // Converti l'input in numero
b = Convert.ToInt32(lineb); // Converti l'input in numero
c = a / b; // Fai la divisione
Console.WriteLine(c);
Console.ReadKey(); // Aspetta che l'utente prema il pulsante per uscire
}
}
}
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.

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.



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.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int a, b;
float c;
string linea = Console.ReadLine(); // Leggi l'input
string lineb = Console.ReadLine(); // Leggi l'input
a = Convert.ToInt32(linea); // Converti l'input in numero
b = Convert.ToInt32(lineb); // Converti l'input in numero
try
{
c = a / b; // Fai la divisione
Console.WriteLine(c);
}
catch(System.DivideByZeroException)
{
Console.WriteLine("Impossibile dividere per zero");
}
Console.ReadKey(); // Aspetta che l'utente prema il pulsante per uscire
}
}
}
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
try
{
c = a / b; // Fai la divisione
Console.WriteLine(c);
}
catch(System.DivideByZeroException exp)
{
Console.WriteLine(exp.Message);
}
Referenze



Blogger e scrittore ventenne nato a Taranto. Collabora con diverse agenzie di marketing digitale e operativo. Ha pubblicato il manuale Windows 10: Guide e Soluzioni e il libro di narrativa storica Cronache di un Palazzo Abbandonato.