gpt4 book ai didi

.net - 异常处理 : Is finally executed after throw?

转载 作者:行者123 更新时间:2023-12-03 13:25:25 27 4
gpt4 key购买 nike

假设您有以下代码:

而不是这样做:

Try
'
' Initialize some objects
'

'
' do something that fails
'

'
' Clean up-code that gets not reached because exception
'
Catch e As Exception
'
'Clean up initialized objects
'

Throw e
End Try

我想要做:
Try
'
' Initialize some objects
'

'
' do something that fails
'
Catch e As Exception
Throw e
Finally
'
'Clean up initialized objects
'
End Try

所以我的简单问题是:如果出现异常,即使之前有 throw 一些行,是否也会到达 finally block ?

[编辑]
感谢您的快速答复。

我认为在第一行会有 NullReference-、COM- 和 FileNotFound-Exceptions。

好的,我将使用此代码:
Try
'
' Initialize some objects
'

'
' do something that fails
'
Catch e As Exception ' or just "Catch"??
Throw
Finally
'
'Clean up initialized objects
'
End Try

祝一切顺利!

英诺

最佳答案

So my simple question is: In case of an exception is the finally block reached even if there is a throw some lines before?



是的。 Finally block总是1) 被执行并且精确地存在以进行清理。在您的代码中,删除 Catch block ,它什么都不做。更糟糕的是,它实际上破坏了堆栈跟踪,因为您没有重新抛出原始异常,而是抛出了一个新异常。

如果您真的需要 Catch然后重新抛出异常的 block ,使用以下内容:
Catch e As XyzException
' … do some stuff. '
Throw
End Try

1): 警告购买者:有一些异常(exception),例如 StackOverflowException (多么合适……)需要特别注意并且可能不会触发 Finally堵塞。正确处理它们通常非常困难。

关于.net - 异常处理 : Is finally executed after throw?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1577049/

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