尝试......抓住...最后在VB.NET中

时间:2016-02-24 10:58:04

标签: .net vb.net try-catch

在VB.NET中,如果从Catch返回值,Finally代码是否仍会执行?

例如(我稍微概括了这段代码):

Try
    response = Client.doRequest()
Catch ex As Exception
    'Request threw an error - Fatal failure.
    InsertErrorLog(ex)
    Return False
Finally
    DisposeClient()
End Try

我需要确保DisposeClient()始终执行。因为我要退出CatchFinally是否仍会被执行?

2 个答案:

答案 0 :(得分:9)

总是执行

Finally 阻止,无论代码是否执行到 Catch 阻止。

请参阅:https://msdn.microsoft.com/en-us/library/fk6t46tz.aspx

尝试使用此代码:

Dim Temp As String

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Temp = "A"

    MessageBox.Show(Test())
    MessageBox.Show(Temp)
End Sub

Private Function Test() As String
    Try
        Temp = "B"
        Throw New Exception()
        Temp = "C"

        Return "Try"
    Catch ex As Exception
        Temp = "D"
        Return "Catch"
    Finally
        Temp = "E"
    End Try

    Temp = "F"
    Return "End"
End Function

显示消息:

Catch

然后再

E

这意味着,即使函数在 Finally 块处返回,也始终会执行 Catch 块。

答案 1 :(得分:1)

仔细检查Microsoft MSDN文档后,我注意到:

  

无论如何,控制都会传递到最终块   尝试 ... Catch 阻止退出。

     

即使您的代码遇到返回最终块中的代码也会运行   尝试 Catch 块中的语句。

     

控件未从尝试 Catch 块传递到相应的   最终在以下情况下阻止:

     
      
  • 尝试 Catch 块中遇到结束声明。
  •   
  • 尝试 Catch 块中会抛出 StackOverflowException
  •   

简而言之,是的 - 最终始终在大多数案件中执行。

相关问题