Il blocco finally

Il blocco finally è opzionale e viene utilizzato per eseguire operazioni di pulizia, come la liberazione della memoria o la chiusura di file.

Regole di utilizzo di finally

Esempio di utilizzo di finally

try
{
    // Simulazione di un errore
    int result = 10 / 0;
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("Errore: divisione per zero.");
}
finally
{
    Console.WriteLine("Questo messaggio viene sempre eseguito.");
}

Output:

Errore: divisione per zero.
Questo messaggio viene sempre eseguito.

Ordine dei blocchi catch

Quando si catturano più tipi di eccezioni, bisogna seguire questa regola:

  1. Prima i blocchi catch più specifici, per intercettare errori particolari.
  2. Alla fine il blocco catch generico (Exception), per catturare eventuali errori non previsti.

Esempio corretto

try
{
    string text = null;
    int length = text.Length; // Genera un'eccezione
}
catch (NullReferenceException ex)
{
    Console.WriteLine("Errore: variabile null.");
}
catch (Exception ex)
{
    Console.WriteLine("Errore generico: " + ex.Message);
}

Se il blocco catch generico fosse stato messo prima di quello specifico, il compilatore segnalerebbe un errore perché il catch generico catturerebbe tutte le eccezioni, rendendo inutile quello specifico.