Gestione delle Eccezioni in C#

Quando si verifica un errore nel programma, si dice che viene sollevata un’eccezione. Nei linguaggi strutturati di solito viene ritornato un determinato valore per certe funzioni, quando si ha un errore. In C# al momento della generazione del problema viene creata una classe ad hoc, nella quale sono descritte tutte le informazioni sull’errore e la procedura che l’ha generato. Quando si richiama un blocco di codice che potrebbe sollevare un errore, come la gestione dei files o altre routines che operano su informazioni non concesse a tutti gli utenti del sistema, è possibile racchiuderlo in un’istruzione di controllo, per intercettare eventuali eccezioni sollevate da quel codice. Il linguaggio C# permette di organizzare le parti del codice suddividendole in tre sezioni distinte:

  • try – l’algoritmo
  • catch – la routine di controllo dell’errore
  • finally – il codice eseguito sempre

Facciamo un semplice esempio pratico:

using System;

public class Corso
{
     static void Main(string[] args)
     {
         int[] k = {10, 12, 34};

        try
        {
            for (int i = 0; i < 5; ++i)
                Console.WriteLine("In posizione {0} abbiamo {1}",
                     i + 1, k[i]);
         }
         catch (System.Exception e)
         {
              Console.WriteLine(e.Message + "\n\n");
         }
         finally
         {
             Console.WriteLine("Scusate, ho sbagliato...\n\n");
             for (int i = 0; i < k.Length; ++i)
                 Console.WriteLine("In posizione {0} abbiamo {1}",
                        i + 1, k[i]);
         }

         Console.ReadKey();
    }
}

Nel blocco try viene specificato il codice che dev’essere soggetto a controllo, che viene eseguito passo passo in modo controllato dall’ambiente runtime del .NET. Le eccezioni che si vogliono intercettare sono invece indicate in opporture istruzioni catch, ne esiste una per ogni errore da gestire. Se si desidera comprendere più errori in un determinato ordine, occorre inserire più istruzioni catch. L’errore dicevamo, viene intercettato e caricato in una classe System.Exception, che risulta essere la classe base di tutte le altre che si occupano della gestione degli errori di file, di operazioni matematiche, come la divisione per zero, e tante altre; per un elenco completo guardatevi l’aiuto in linea del framework .NET. Il blocco finally viene eseguito sempre, al termine delle istruzioni del blocco try. Quest’ultimo viene di solito utilizzato per rilasciare le risorse, come per esempio se in try viene inserita l’apertura di un file. Nella prossima lezione concluderemo la parte del corso dedicata alle eccezioni, vedendo come sollevarle tramite codice e come creare eccezioni personalizzate per il proprio applicativo.

<< Lezione Precedente – Inizio CorsoIndice LezioniLezione Successiva >>

Di Giampaolo Rossi

Sviluppatore software da oltre 16 anni.