Gestione delle Eccezioni in C#

La gestione delle eccezioni è fondamentale per prevenire il crash di un programma a causa di errori imprevisti, come problemi di risorse o condizioni inaspettate. In un programma, quando si verifica un'eccezione, il runtime esegue una serie di passaggi per cercare un gestore che possa gestirla. Se non trova alcun gestore, il programma va in crash e mostra una schermata di errore.

Cos'è un'eccezione?

Un'eccezione è un oggetto che rappresenta un errore verificatosi durante l'esecuzione del programma. In C#, tutte le eccezioni derivano dalla classe base System.Exception. Le eccezioni contengono diverse informazioni utili per il debug e la gestione degli errori, tra cui:

La Struttura di Gestione delle Eccezioni

Per gestire le eccezioni, in C# si utilizza una struttura composta da tre blocchi principali:

  1. try: Contiene il codice che potrebbe causare un'eccezione.
  2. catch: Gestisce l'eccezione nel caso in cui si verifichi. È possibile specificare un tipo di eccezione per ogni blocco catch (ad esempio, DivideByZeroException).
  3. finally: Esegue un blocco di codice che deve essere eseguito indipendentemente dal fatto che si sia verificata un'eccezione o meno (ad esempio, per liberare risorse).

Un esempio di codice per la gestione delle eccezioni è il seguente:

try {
    // Codice che potrebbe generare un'eccezione
    int[] array = new int[5];
    int x = array[10]; // Genera un'eccezione di indice fuori intervallo
} catch (IndexOutOfRangeException e) {
    // Gestione dell'eccezione
    Console.WriteLine("Errore: " + e.Message);
} finally {
    // Codice che viene eseguito indipendentemente dall'eccezione
    Console.WriteLine("Operazione conclusa");
}

Il Flusso di Gestione delle Eccezioni

Quando si verifica un'eccezione, il Common Language Runtime (CLR) risale lo stack delle chiamate alla ricerca di un blocco catch che possa gestirla. Se non viene trovato nessun blocco catch appropriato, il programma va in crash e vengono mostrate informazioni sull'errore (come una schermata di errore).

Quando Utilizzare il Blocchi try, catch e finally