当C#中带有return的TryCatch代码遇到Finally时代码执行顺序

时间:2022-04-11 06:07:20

编写的代码最怕出现的情况是运行中有错误出现,但是无法定位错误代码位置。综合《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中

当C#中带有return的TryCatch代码遇到Finally时代码执行顺序

第二张:return出现在Try中

当C#中带有return的TryCatch代码遇到Finally时代码执行顺序