如何在同一方法的多组连续try...catch后,确保单个finally块无论如何都会执行?
需求实现方案说明
结论
该需求完全可以实现,你原本示例中单独将finally放在多组try/catch后的写法不符合C#语法规范,调整结构即可达成目标。
实现方式
核心思路是给所有的try/catch块外层套一个全局的try,再和你需要全局执行的finally配对即可,调整后的代码如下:
public void Method() { // 外层新增仅用于绑定finally的try块,无需配套catch try { try { // 第一组业务逻辑 } catch ( Exception e ) { // 处理第一组异常 } try { // 第二组业务逻辑 } catch ( Exception e ) { // 处理第二组异常 } try { // 第三组业务逻辑 } catch ( Exception e ) { // 处理第三组异常 } } finally { // 此处代码无论前面任意一组try/catch是否捕获到异常都会执行 // Execute no matter what } }
原理解释
- C#语法要求
finally必须和try配对出现,原示例中finally没有对应try会直接编译报错。 - 外层的
try不需要配套catch即可合法运行,不会干涉内层try/catch的异常处理逻辑。 - 无论内层
try是否抛出异常、异常是否被对应catch捕获、甚至catch块中主动触发返回/抛出新异常,外层try对应的finally都会在方法退出前执行,完全满足无需给每组try/catch单独加finally的需求。
内容的提问来源于stack exchange,提问作者user12288009
相关产品推荐
相关产品推荐

