Vb.net Visual basic“;“最后,关于例外”;

Vb.net Visual basic“;“最后,关于例外”;,vb.net,Vb.net,我希望在catch语句之后运行一段代码,而不管发生了什么异常,但仅当发生了某些异常时才运行。所以基本上它是一个finally语句,需要一个异常才能执行。在visual basic中是否有一种简单的方法可以做到这一点?无论是否引发异常,都将始终调用If语句的finally块 唯一的其他方法是让另一个方法接受异常作为参数,并从异常捕获调用该方法。您可以添加不同的异常块,如下所示: Try ' do operation ' Most specific: Catch e As Applicati

我希望在catch语句之后运行一段代码,而不管发生了什么异常,但仅当发生了某些异常时才运行。所以基本上它是一个finally语句,需要一个异常才能执行。在visual basic中是否有一种简单的方法可以做到这一点?

无论是否引发异常,都将始终调用If语句的finally块


唯一的其他方法是让另一个方法接受异常作为参数,并从异常捕获调用该方法。

您可以添加不同的异常块,如下所示:

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
怎么样

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

我不喜欢,但是嵌套的
试试怎么样

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

瘸的我希望这样可以减少代码,但您给出的解决方案会生成更多代码。哦,好吧,不管是不是跛脚,这都是Try…Catch…Finally block的规范。如果发生ApplicationException,则不会执行异常。是的,这是正确的,但这不是您想要的吗?您希望在发生特定异常时执行不同的代码段。如果有代码需要为每个异常执行,则可以将其提取到方法中并重用该方法。finally关键字并不是你想要的。这正是最终的目的。最后,是否总是要执行异常。那么,它是什么呢?不管什么例外,只有在某些例外上?你不能两者兼得。你的第一句话要求同时存在两个相互排斥的条件。如果你给出一些伪代码,你可以避免投反对票。有时你不得不写所有的代码,尽管看起来很繁重。这些代码可能是JoeEnos发布的,但没有布尔值。我不认为它存在于visual basic中。这有什么意义?为什么不把代码放在
Catch
块中呢?这就是它的目的@CodyGray我爱的时候有些随机的知道一切的灌洗袋不明白,所以他们把票投给了我。。。也许你应该考虑你不知道一切,然后你去投票给某人,不值得。只是代码稍微少了一点,但阅读起来也稍微难了一点。我更喜欢这个版本-当你在2年后查看代码时,很明显这会起到什么作用,但是对于另一个版本,你会对嵌套的try/catch摸不着头脑。这不是我希望的,但它会起作用。实际上,不得不抛出另一个异常一点也不吸引人。尽管如此,这项工作仍然是个道具。你实际上并没有抛出另一个异常,只是重新抛出了你已有的异常,所以你保留了堆栈跟踪和所有东西。但我同意,这不是最优雅的代码。