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

Vir*_*aly 8 .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
Run Code Online (Sandbox Code Playgroud)

我需要确保DisposeClient()一直执行.因为我要退出了Catch,还会Finally被执行吗?

ich*_*ira 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
Run Code Online (Sandbox Code Playgroud)

它显示消息:

Catch
Run Code Online (Sandbox Code Playgroud)

然后

E
Run Code Online (Sandbox Code Playgroud)

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