2013-04-12 51 views
-1

我想在catch語句之後運行一段代碼,不管發生了什麼異常,但只有當發生一些異常時。所以基本上這是一個最終聲明,需要執行一個異常。有沒有一種簡單的方法在Visual Basic中做到這一點?Visual basic「終於出現異常」

+1

那麼,它是什麼?無論有什麼例外,只有一些例外?你不能擁有它。 –

+0

你的第一句話要求同時存在兩個相互排斥的條件。如果你給一些僞代碼,你可以避免一個倒票。有時你只需編寫所有的代碼,儘管看起來很麻煩。 –

+0

代碼將是Joe Enos發佈的內容,但不包含布爾值。我不認爲它存在於視覺化的基礎上。 – SteveDeFacto

回答

0

無論是否存在異常,總是會調用If語句的finally塊。 MSDN

要做到這一點的唯一方法是讓另一個方法接受異常作爲參數並從異常捕獲中調用該方法。

+0

Lame ...我想這樣會有更少的代碼,但是您提供的解決方案會使代碼更多。哦,好吧...... – SteveDeFacto

+0

Lame或不是它的Try ... Catch ...最後的塊 –

0

您可以添加不同的異常塊,像這樣:

Try 
    ' do operation 
' Most specific: 
Catch e As ApplicationException 
    ' do something only if ApplicationException has occurred 
' Least specific: 
Catch e As Exception 
    Console.WriteLine("{0} Second exception caught.", e); 
End Try 
+0

的規範如果ApplicationException發生,那麼Exception將不會執行。 – SteveDeFacto

+0

是的,這是正確的,但不是你所追求的是什麼?如果發生某種異常,您希望執行一段不同的代碼。如果您需要爲每個異常執行代碼,則可以將其提取到方法並重用該方法。 finally關鍵字實際上不是你所追求的。這正是最終不適合的。最後總是在那裏執行,例外與否。 – Kenneth

1

如何

Dim isException As Boolean = False 
Try 
    .... 
Catch ex As ApplicationException 
    isException = True 
    .... 
Catch ex As Exception 
    isException = True 
    .... 
Finally 
    If (isException) 
     .... 
    End If 
End Try 
+0

不值得。只有稍少的代碼,但稍微難以閱讀。 – SteveDeFacto

+1

我更喜歡這個版本 - 當你在2年內查看代碼時,它會明白它的作用,但在另一個版本中,你會對嵌套的try/catch感到頭疼。 –

1

我不喜歡它,但如何對嵌套Try

Try 
    Try 
     .... 
    Catch ex As ApplicationException 
     Throw 
    Catch ex As Exception 
     Throw 
    End Try 
Catch 
    ' This is your "finally" 
End Try 
+0

不是我所希望的,但它會做。 – SteveDeFacto

+0

事實上,不得不拋出另一個異常並不吸引人。儘管如此,仍然支持這一努力。 – SteveDeFacto

+1

你實際上並沒有拋出另一個異常,只是重新拋出你已有的異常,所以你保持你的堆棧跟蹤和一切。但我同意,不是最優雅的代碼。 –