gpt4 book ai didi

c# - C# 中的 finally block 是必须的吗?

转载 作者:太空狗 更新时间:2023-10-29 20:46:50 24 4
gpt4 key购买 nike

2个条件有什么区别?每次 method1 或 method2 运行时,应该有一个代码块需要运行。在我看来,2 种方法是相同的。

// example method1
void Method1(void)
{
try
{
// do something
}
catch (Exception ex)
{
// do something
}
finally
{
// do something whenever method1 runs
}
}

// example method2
void Method2(void)
{
try
{
// do something
}
catch (Exception ex)
{
// do something
}

// do something whenever method2 runs
}

Finally block 对我来说似乎是不必要的。

最佳答案

在您的第一个示例中,您可以重新抛出异常并且 finally 中的代码仍然会运行。这在第二个示例中是不可能的。

如果您选择不重新抛出异常,那么是的,差别不大。但是,这被认为是不良形式 - 如果您需要使用无法显式处理<的异常,这种情况很少/em>.

它是帮助您执行代码流程的关键字。当您抛出异常时,代码的执行流程会受到影响(例如使用 return),finally 关键字允许您表达当异常发生时(或者您 return from a try) 你仍然希望执行在它离开时做一些事情。

要开玩笑地回答这个问题,需要的时候是必须的,不需要的时候不是。


延伸阅读

为了安全起见,在您尝试开始使用此关键字之前,请阅读它的文档:

http://msdn.microsoft.com/en-us/library/zwc8s4fz.aspx

以及一般的异常处理关键字:

http://msdn.microsoft.com/en-us/library/s7fekhdy.aspx


例子

捕获异常以对其进行处理,然后重新抛出它。使用 finally 调用任何整理代码:

try
{
OpenConnectionToDatabase();
// something likely to fail
}
catch (Exception ex)
{
Log(ex);
throw;
// throw ex; // also works but behaves differently
}
// Not specifying an exception parameter also works, but you don't get exception details.
//catch (Exception)
//{
// Log("Something went wrong);
// throw;
//}
finally
{
CloseConnectionToDatabase();
}

不要对捕获异常表现出任何兴趣,而是使用 finally 来整理代码:

try
{
OpenConnectionToDatabase();
// something likely to fail
}
finally
{
CloseConnectionToDatabase();
}

从你的 try 返回,因为它看起来格式很好,但仍然使用 finally 来整理代码:

try
{
OpenConnectionToDatabase();
return 42;
}
finally
{
CloseConnectionToDatabase();
}

关于c# - C# 中的 finally block 是必须的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9717183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com