[英]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()
始終執行。 因為我要退出Catch
, Finally
還是會被執行嗎?
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塊。
即使您的代碼在Try或Catch塊中遇到Return語句, Finally塊中的代碼也會運行。
在以下情況下,控件不會從Try或Catch塊傳遞到相應的Finally塊:
- Try或Catch塊中遇到End語句。
- Try或Catch塊中拋出StackOverflowException 。
簡而言之,是 - 在大多數情況下始終執行最后 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.