簡體   English   中英

嘗試......抓住...最后在VB.NET中

[英]Try…Catch…Finally in VB.NET

在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還是會被執行嗎?

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塊。

仔細檢查Microsoft MSDN文檔,我注意到:

無論Try ... Catch塊如何退出,Control都會傳遞給Finally塊。

即使您的代碼在TryCatch塊中遇到Return語句, Finally塊中的代碼也會運行。

在以下情況下,控件不會從TryCatch塊傳遞到相應的Finally塊:

  • TryCatch塊中遇到End語句。
  • TryCatch塊中拋出StackOverflowException

簡而言之,是 - 在大多數情況下始終執行最后

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM