C#中带有return的TryCatchFinally的执行顺序

经过长时间的资料查阅,终于找到一篇说得简单易懂一目了然的文章把这个问题说清楚了。分享出来给大家。

原文网址:当C#中带有return的TryCatch代码遇到Finally时代码执行顺序

编写的代码最怕出现的情况是运行中有错误出现,但是无法定位错误代码位置。综合《C#4.0图解教程》,总结如下:

TryCatchFinally用到的最多的是TryCatch,Catch可以把Try代码块的错误捕捉到,并对错误进行后续处理。这一点比较常见。

现在要讨论的是如果Try和Catch代码块有return时代码的执行顺序。众所周知,return的作用是退出当前函数,不执行return后面的代码。那么问题来了:如果return出现在Try或catch代码块中,并且return后面还有代码,则return后面的代码将不再执行,程序直接退出这个函数。假如我们在这个函数中有一些代码无论何种情况下都是必须要执行(比如ADO.Net中的数据库连接,为保证稳定,即使代码出现异常也需要通过代码强制关闭该连接),那么简单的TryCatch就不能很好的满足需求了。此时Finally代码块的作用就显现出来了。

《C#4.0图解教程》中讲到,Finally代码块的优先级比较高,不论TryCatch代码块如何运行,最后都要执行Finally代码块。即使Try和Catch中有return也无妨。

直接上图,具体的代码执行顺序在图中标注的比较清楚。

return出现在Catch中

在这里插入图片描述

return出现在Try中

在这里插入图片描述
感谢原文作者!

补充说明

对于嵌套的try,每个try中的finally中的代码,在return后都会执行。如下代码中,“错误处理代码1”和“错误处理代码2”均会被执行。

try
{
	try
	{
		//你的过程代码
		return;
	}
	catch(Exception ex)
	{
		//错误处理代码1
		return;
	}
	finally
	{
		//必执行代码1
	}
}
catch(Exception ex)
{
	//错误处理代码2
	return;
}
finally
{
	//必执行代码2
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值