更新:2007 年 11 月

finally 块用于清除 try 块中分配的任何资源,以及运行任何即使在发生异常时也必须执行的代码。控制总是传递给 finally 块,与 try 块的退出方式无关。

catch 用于处理语句块中出现的异常,而 finally 用于保证代码语句块的执行,与前面的 try 块的退出方式无关。

示例

在此例中,有一个导致异常的无效转换语句。当运行程序时,您收到一条运行时错误信息,但 finally 子句仍继续执行并显示输出。

C# 复制代码
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;
        }
        finally
        {
            Console.Write("i = {0}", i);
        }
    }
}


上面的示例将导致引发 System.InvalidCastException

尽管捕捉了异常,但仍会执行 finally 块中包含的输出语句,即:

i = 123

有关 finally 的更多信息,请参见 try-catch-finally

C# 还提供了 using 语句,该语句为与 try-finally 语句完全相同的功能提供了简便语法。

C# 语言规范

有关更多信息,请参见 C# 语言规范中的以下各章节:

  • 5.3.3.14 Try-finally 语句

  • 8.11 try 语句

  • 16 异常

请参见

任务

如何:显式引发异常

概念

参考

The try, catch, and throw Statements

其他资源