Inn*_*nno 18 .net vb.net exception-handling
假设您有以下代码:
而不是做:
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
Run Code Online (Sandbox Code Playgroud)
我想要做:
Try
'
' Initialize some objects
'
'
' do something that fails
'
Catch e As Exception
Throw e
Finally
'
'Clean up initialized objects
'
End Try
Run Code Online (Sandbox Code Playgroud)
所以我的简单问题是:如果出现异常,即使之前有一些行,也会达到finally块?
[编辑] 感谢您的快速解答.
在第一行中我会想到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
Run Code Online (Sandbox Code Playgroud)
祝一切顺利!
英诺
Kon*_*lph 25
所以我的简单问题是:如果出现异常,即使之前有一些行,也会达到finally块?
是.该Finally
块始终是1)执行并且精确存在以进行清理.在您的代码中,删除Catch
块,它什么都不做.更糟糕的是,它实际上会破坏堆栈跟踪,因为您不会重新抛出原始异常,而是抛出一个新异常.
如果您确实需要一个Catch
块然后重新抛出异常,请使用以下命令:
Catch e As XyzException
' … do some stuff. '
Throw
End Try
Run Code Online (Sandbox Code Playgroud)
1):注意事项:有一些例外,例如StackOverflowException
(如何拟合......)需要特别注意并且可能不会触发Finally
阻止.正确处理它们通常很困难.
归档时间: |
|
查看次数: |
12031 次 |
最近记录: |