Condividi tramite


Gestione degli errori e delle eccezioni (Visual C# Express)

Aggiornamento: novembre 2007

Quando si verifica un problema mentre un programma C# è in esecuzione, viene generata un'eccezione. Le eccezioni interrompono il flusso corrente del programma e, se non viene intrapresa alcuna azione, l'esecuzione del programma viene interrotta. Le eccezioni possono essere causate da un errore nel programma, ad esempio un numero diviso per zero, o essere il risultato di un input imprevisto, come nel caso di un utente che selezioni un file inesistente. In qualità di programmatore, è necessario creare un programma in grado di gestire questi problemi senza interruzioni.

C# fornisce numerose parole chiave (try, catch e finally) che consentono ai programmi di rilevare le eccezioni, gestirle e continuare l'esecuzione. Rappresentano uno strumento molto utile per aumentare l'affidabilità delle applicazioni.

Try e Catch

Le parole chiave try e catch vengono utilizzate congiuntamente. Utilizzare try per racchiudere il blocco di codice che si ritiene possa generare un'eccezione e catch per contenere il codice che sarà eseguito se si verifica l'eccezione. In questo esempio un calcolo crea un'eccezione dovuta a una divisione per zero, che viene rilevata. Senza i blocchi try e catch, questo programma verrebbe interrotto.

class ProgramTryCatch
{
    static void Main()
    {
        int x=0, y=0;

        try
        {
            x = 10 / y;
        }

        catch (System.DivideByZeroException)
        {
            System.Console.WriteLine("There was an attempt to divide by zero.");
        }
    }
}

È buona norma di programmazione essere specifici riguardo al tipo di eccezione rilevata dal codice catch. Ogni try può avere più istruzioni catch, ognuna delle quali gestisce un'eccezione diversa.

Blocchi finally

Il codice contenuto in un blocco finally viene sempre eseguito, indipendentemente dal fatto che si verifichi o meno un'eccezione. Utilizzare il blocco finally per accertarsi che le risorse vengano restituite, ad esempio per assicurarsi che un file venga chiuso.

try
{
    // Code to try here.
}
catch (SomeSpecificException ex)
{
    // Code to handle exception here.
}
finally
{
    // Code to execute after try (and possibly catch) here.
}

Uso della gestione delle eccezioni

Le eccezioni non sono sempre un segno della presenza di un problema irreversibile nel programma. Spesso rappresentano un modo pratico per abbandonare una sezione di codice non più rilevante o un segnale per indicare che un metodo ha avuto esito negativo. Molti metodi delle classi .NET Framework creano eccezioni per avvisare di una particolare condizione.

È anche possibile causare eccezioni personalizzate mediante la parola chiave throw. Di seguito è riportato un esempio:

class ProgramThrow
{
    static void DoWork(int x)
    {
        if (x > 5)
        {
            throw new System.ArgumentOutOfRangeException("X is too large");
        }
    }

    static void Main()
    {
        try
        {
            DoWork(10);
        }
        catch (System.ArgumentOutOfRangeException ex)
        {
            System.Console.WriteLine(ex.Message);
        }
    }
}

Utilizzare le eccezioni nei programmi nel caso si ritenga possibile il verificarsi di una situazione imprevista, ad esempio durante la gestione di input di un utente, la lettura di un file o l'accesso a informazioni da Internet.

Vedere anche

Attività

Procedura: intercettare un'eccezione (Visual C#)

Concetti

Nozioni di base del linguaggio C#

Riferimenti

Istruzioni di gestione delle eccezioni (Riferimenti per C#)

throw (Riferimenti per C#)

try-catch (Riferimenti per C#)

try-finally (Riferimenti per C#)

try-catch-finally (Riferimenti per C#)