两个或更多'try / catch'语句可以在C#中共享一个'finally'语句吗?我正在尝试遵循同事的代码而且它非常草率且无法执行。
示例:
try
{
Function1()
}
catch { }
try
{
Function2();
}
catch { }
try
{
Function3();
}
catch { }
finally
{
EndFunction();
}
答案 0 :(得分:7)
最终版仅适用于您示例中的 last try
。
拥有空catch
块也不是一个好主意,因为它类似于吞噬错误。
答案 1 :(得分:6)
不,每个try/catch/finally
序列都是一个离散的块级语句。但是,每个try
可以包含 0,一个或多个 catch
子句,后跟可选的finally
子句。
查看代码,我认为没有令人信服的理由不写成:
try
{
Function1()
Function2();
Function3();
}
finally
{
EndFunction();
}
正如Jordão所提到的那样,空(未注释)捕捉处理程序是一种可怕的做法。如果您希望它们全部由相同的try
块处理,则没有理由将各种函数调用拆分为单独的finally
块。
答案 2 :(得分:5)
不确定。只需一次尝试/最终包装try / catch。
try
{
try
{
}
catch ...
try
{ }
Catch ...
}
finally
{
}
答案 3 :(得分:2)
不,最后只适用于最后一个try / catch块。
答案 4 :(得分:1)
如果您期望每次调用都有特定的异常,您可以链接您的catch语句
try
{
Function1();
Function2();
Function3();
} catch(Func1Exception e1) {
} catch (Func2Exception e2) {
} catch (Func3Exception e3) {
} finally {
//shared finally
}
另一个选项是使用a来跟踪已执行的功能
var functionExecuted = -1;
try
{
Function1();
functionExecuted = 1;
Function2();
functionExecuted = 2;
Function3();
functionExecuted = 3;
} catch(Exception e) {
} finally {
// functionExecuted indicates the last executed function
}
另一个选择是编写一个从个人最后调用的finally函数 - 但这让我觉得很奇怪。