3

可能重复:
为什么在 C# 中使用 finally?

在 C# 中,有一个finally子句有什么意义?

例如。

try {
        // do something
    }
catch (Exception exc)
    {
        // do something
    }
// do something

最后的代码不会执行吗?finally块的意义何在?

4

7 回答 7

7

finally 是针对即使 catch 也抛出异常的事件,加上它允许您在成功和失败时执行代码,finally总是会被执行。总是。

好的,除非应用程序在系统级别被杀死或计算机爆炸。

于 2010-08-06T18:08:24.290 回答
1

finally 确保块中的任何内容都将被执行,无论前两个语句是否被激活。

一个很好的例子是释放数据库资源。

尝试-抓住-最后

例子:

try
{
   //Open a database connection
}
catch
{
   //Catch exception, database connection failed
}
finally
{
   //Release the opened database connection resources
}
于 2010-08-06T18:09:17.300 回答
0

无论先前的代码是否成功,您都希望执行一些代码。通过使用 Try/Catch/Finally,您可以从错误处理中受益。

于 2010-08-06T18:08:07.547 回答
0

因为您应该对某些对象执行清理,否则会导致您的应用程序出现问题。

经常使用的示例是使用 SqlConnection:

SqlConnection conn = new SqlConnection(connString);

try
{        
    conn.Open();

    throw new ArgumentException();
}
catch(SqlException ex)
{
}

在这种情况下,SqlConnection 保持打开状态,无法关闭它,因为您处理了 SqlException,但引发了 ArgumentException。如果您使用 finally 块,则不会发生这种情况,因为 finally 块代码将执行:

try
{        
    conn.Open();

    throw new ArgumentException();
}
catch(SqlException ex)
{
}
finally
{
    conn.Dispose();
}
于 2010-08-06T18:09:04.570 回答
0

当异常被捕获时,该finally块被保证运行,即使异常处理块抛出更多异常。通常用于清理某些类型的资源,例如打开的文件句柄、网络连接等...

这里的好例子:

http://dotnetperls.com/finally

http://www.csharp-station.com/Tutorials/lesson15.aspx

于 2010-08-06T18:09:05.157 回答
0

如果尝试成功或失败,Finally 确保其中的任何内容都会触发。在发生捕获的情况下,您不能保证最后一切//do something都会发生。

于 2010-08-06T18:10:13.563 回答
0

无论是否抛出异常,Finally 块中的代码都会始终执行。如果路径在 catch 中返回,则异常块后面的代码可能会执行,也可能不会执行。

于 2010-08-06T18:11:05.817 回答