Condividi tramite


Come usare i blocchi finally

Quando si verifica un'eccezione, l'esecuzione arresta e il controllo viene assegnato al gestore eccezioni appropriato. Ciò significa spesso che le righe di codice che si prevede di eseguire vengono ignorate. È necessario eseguire alcune operazioni di pulizia delle risorse, ad esempio la chiusura di un file, anche se viene generata un'eccezione. A tale scopo, è possibile usare un finally blocco. Un finally blocco viene sempre eseguito, indipendentemente dal fatto che venga generata un'eccezione.

Nell'esempio di codice seguente viene usato un blocco try/catch per intercettare un ArgumentOutOfRangeException. Il Main metodo crea due matrici e tenta di copiarne una nell'altra. L'azione genera un ArgumentOutOfRangeException perché length viene specificato come -1 e l'errore viene scritto nella console. Il finally blocco viene eseguito indipendentemente dal risultato dell'azione di copia.

class ArgumentOutOfRangeExample
{
    public static void Main()
    {
        int[] array1 = {0, 0};
        int[] array2 = {0, 0};

        try
        {
            Array.Copy(array1, array2, -1);
        }
        catch (ArgumentOutOfRangeException e)
        {
            Console.WriteLine($"Error: {e}");
            throw;
        }
        finally
        {
            Console.WriteLine("This statement is always executed.");
        }
    }
}
Class ArgumentOutOfRangeExample
    Public Shared Sub Main()
        Dim array1() As Integer = {0, 0}
        Dim array2() As Integer = {0, 0}

        Try
            Array.Copy(array1, array2, -1)
        Catch e As ArgumentOutOfRangeException
            Console.WriteLine("Error: {0}", e)
            Throw
        Finally
            Console.WriteLine("This statement is always executed.")
        End Try
    End Sub
End Class

Vedere anche