try-finally(C# 参考)

更新:2010 年 5 月

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

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

示例

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

    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
    }

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

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

i = 123

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

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

C# 语言规范

有关更多信息,请参见 C# 语言规范。C# 语言规范是 C# 语法和用法的权威资料。

请参见

任务

如何:显式引发异常

参考

C# 关键字

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

异常处理语句(C# 参考)

throw(C# 参考)

try-catch(C# 参考)

概念

C# 编程指南

其他资源

C# 参考

修订记录

Date

修订记录

原因

2010 年 5 月

添加了用于在示例中阐述结果的编写语句和指令。

客户反馈