假设您有以下代码:
而不是做:
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所以我的简单问题是:在发生异常的情况下,是否到达了finally块,即使有抛出之前的一些行?
EDIT感谢您的快速回答。
在第一行将会有NullReference-,COM-和FileNotFound-异常。
好的,我将使用下面的代码:
Try
'
' Initialize some objects
'
'
' do something that fails
'
Catch e As Exception ' or just "Catch"??
Throw
Finally
'
'Clean up initialized objects
'
End Try万事如意!
Inno
发布于 2009-10-16 09:26:00
不,不能保证它会运行。有一些例外--例如StockOverflowException和OutOfMemoryException --在这些情况下,finally块的执行不能得到保证。
发布于 2009-10-16 09:26:00
在几乎所有的情况下,Finally都会在Try/Catch块中执行(值得注意的例外情况包括发生StackOverflowException或OutOfMemoryException时)。我很好奇,为什么你不亲自尝试一下呢?学习东西的一个有价值的方法是亲自尝试--毕竟,你最终可能会接受一个错误或误导性的答案,从那时起,你就会在这个错误中苦苦挣扎。
发布于 2009-10-16 10:27:39
注意: System.Environment.FastFail方法是立即杀死当前进程/线程,而不是执行最终部分。
https://stackoverflow.com/questions/1577049
复制相似问题