Share via


如何:使用 Finally 块

异常发生时,执行将终止,并且控制交给最近的异常处理程序。 这通常意味着不执行希望总是调用的代码行。 有些资源清理(如关闭文件)必须总是执行,即使有异常发生。 为实现这一点,可以使用 Finally 块。 Finally 块总是执行,不论是否有异常发生。

下面的代码示例使用 try/catch 块捕获 ArgumentOutOfRangeException。 Main 方法创建两个数组并尝试将一个数组复制到另一个数组。 该操作生成 ArgumentOutOfRangeException,同时错误被写入控制台。 Finally 块执行,不论复制操作的结果如何。

示例

Imports System

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)
        Finally
            Console.WriteLine("This statement is always executed.")
        End Try
    End Sub
End Class
using System;

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: {0}", e);
        }
        finally
        {
            Console.WriteLine("This statement is always executed.");
        }
    }
}
using namespace System;

ref class ArgumentOutOfRangeExample
{
public:
    static void Main()
    {
        array<int>^ array1 = {0, 0};
        array<int>^ array2 = {0, 0};

        try
        {
            Array::Copy(array1, array2, -1);
        }
        catch (ArgumentOutOfRangeException^ e)
        {
            Console::WriteLine("Error: {0}", e);
        }
        finally
        {
            Console::WriteLine("This statement is always executed.");
        }
    }
};

int main()
{
    ArgumentOutOfRangeExample::Main();
}

请参见

任务

如何:使用 Try/Catch 块捕捉异常

如何:显式引发异常

如何:创建用户定义的异常

其他资源

异常处理基础知识