try...finally (Riferimenti per C#)

Il blocco finally è utile per la pulizia di tutte le risorse allocate nel blocco try e per l'esecuzione di qualsiasi codice che è necessario eseguire anche in presenza di un'eccezione. Il controllo viene sempre passato al blocco finally, indipendentemente dalla modalità di uscita dal blocco try.

Mentre catch viene utilizzato per gestire le eccezioni che si verificano nel blocco di istruzioni, finally viene utilizzato per garantire l'esecuzione di un blocco di istruzioni del codice indipendentemente dalla modalità di uscita dal blocco try che lo precede.

Esempio

In questo esempio è contenuta un'istruzione di conversione non valida che genera un'eccezione. Sebbene durante l'esecuzione del programma venga generato un errore di runtime, la clausola finally verrà comunque eseguita e il relativo output verrà visualizzato.

    public class ThrowTest
    {
        static void Main()
        {
            int i = 123;
            string s = "Some string";
            object o = s;

            try
            {
                // Invalid conversion; o contains a string, not an int
                i = (int)o;

                Console.WriteLine("WriteLine at the end of the try block.");
            }
            finally
            {
                // To run the program in Visual Studio, type CTRL+F5. Then 
                // click Cancel in the error dialog.
                Console.WriteLine("\nThe finally block is executed, even though"
                    + " an error was caught in the try block.");
                Console.WriteLine("i = {0}", i);
            }
        }
        // Output:
        // Unhandled Exception: System.InvalidCastException: Specified cast is not valid.
        // at ValueEquality.ThrowTest.Main() in c:\users\sahnnyj\documents\visual studio
        // 2010\Projects\ConsoleApplication9\Program.cs:line 21
        //
        // The finally block is executed, even though an error was caught in the try block.
        // i = 123
    }

Nell'esempio precedente viene generata un'eccezione System.InvalidCastException.

L'istruzione di output contenuta nel blocco finally verrà comunque eseguita, nonostante sia stata intercettata un'eccezione:

i = 123

Per ulteriori informazioni su finally, vedere try-catch-finally.

C# fornisce anche l'istruzione using che offre una sintassi efficiente per la stessa funzionalità dell'istruzione try-finally.

Specifiche del linguaggio C#

Per ulteriori informazioni, vedere la Specifiche del linguaggio C#. La specifica del linguaggio è la fonte ufficiale per la sintassi e l'utilizzo di C#.

Vedere anche

Attività

Procedura: generare eccezioni in modo esplicito

Riferimenti

Parole chiave di C#

try, catch, and throw Statements (C++)

Istruzioni di gestione delle eccezioni (Riferimenti per C#)

throw (Riferimenti per C#)

try-catch (Riferimenti per C#)

Concetti

Guida per programmatori C#

Altre risorse

Riferimenti per C#

Cronologia delle modifiche

Data

Cronologia

Motivo

Maggio 2010

Sono stati aggiunti rendiconti e istruzioni di scrittura nell'esempio in modo da chiarire i risultati.

Commenti e suggerimenti dei clienti.