可以两个或更多的'try/catch'语句共享'finally'语句
本文关键字:语句 try catch finally 共享 两个 | 更新日期: 2023-09-27 18:14:59
在c#中两个或多个'try/catch'语句可以共享'finally'语句吗?我正在试着遵循一个同事的代码,它非常草率和不可执行。
的例子:
try
{
Function1()
}
catch { }
try
{
Function2();
}
catch { }
try
{
Function3();
}
catch { }
finally
{
EndFunction();
}
finally仅适用于示例中的最后一个 try
。
拥有空的catch
块也不是一个好主意,因为它类似于吞食虫子。
不,每个try/catch/finally
序列是一个离散的块级语句。然而,每个try
可以有零,一个或多个 catch
子句,后跟一个可选的finally
子句。
查看代码,我看不出有什么令人信服的理由不写成:
try
{
Function1()
Function2();
Function3();
}
finally
{
EndFunction();
}
正如jordfinally
块处理,则没有理由将各种函数调用拆分为单独的try
块。
当然。在try/catch语句中加上try/finally语句
try
{
try
{
}
catch ...
try
{ }
Catch ...
}
finally
{
}
不,finally只适用于最后一个try/catch块。
如果你期望从每个调用中得到特定的异常,你可以链接你的catch语句
try
{
Function1();
Function2();
Function3();
} catch(Func1Exception e1) {
} catch (Func2Exception e2) {
} catch (Func3Exception e3) {
} finally {
//shared finally
}
另一个选项是使用an来跟踪哪个函数执行了
var functionExecuted = -1;
try
{
Function1();
functionExecuted = 1;
Function2();
functionExecuted = 2;
Function3();
functionExecuted = 3;
} catch(Exception e) {
} finally {
// functionExecuted indicates the last executed function
}
另一个选项是编写一个finally函数,从单个的finally函数调用——但这让我觉得很奇怪。