gpt4 book ai didi

vb.net - try/finally block 中抛出双重异常

转载 作者:行者123 更新时间:2023-12-02 06:13:59 24 4
gpt4 key购买 nike

这是代码示例:

Try
Throw New FirstException()
Finally
Throw New SecondException()
End Try

我发现它只会抛出 SecondException,而 FirstException 就会消失。

我以为 FirstException 将位于 SecondException 的 InnerException 属性内,但看起来并非如此。

我没有被任何事情阻止,因为我真的不需要出现 FirstException,我只是对这种行为很感兴趣。

  • 有没有办法知道 SecondException 在什么时候首先被抛出在上层捕获所有内容?

  • 如果第一个异常确实被第二个异常覆盖,那么什么是原因?

  • 其他语言也会发生这种情况吗?符合逻辑吗?

最佳答案

我猜为什么这种方式起作用的主要解释是,您永远不会捕获第一个异常并将其沿着链传递。如果遇到类似上面的情况,您可能会在返回原始调用者的途中抛出多个异常,那么您必须在抛出它们时捕获它们(并在创建下一个异常时将它们作为内部异常包含在内):

Dim ex1 As Exception = Nothing
Try
Throw New Exception("first exception")
Catch ex As Exception
ex1 = ex
Finally
Throw New Exception("second exception", ex1)
End Try

或者,可能更好 - 只是在弄清楚所有异常之前不要抛出:

Dim ex1 As Exception = Nothing
Try
ex1 = New Exception("first exception")
Finally
Throw New Exception("second exception", ex1)
End Try

抛出和捕获异常的成本很高,因此最好不要抛出异常,直到您准备好返回并一路记录。

关于vb.net - try/finally block 中抛出双重异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12641834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com