2013-04-12 49 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

你实际上并没有抛出另一个异常,只是重新抛出你已有的异常,所以你保持你的堆栈跟踪和一切。但我同意,不是最优雅的代码。 –