我遇到了行为不一致的稍微奇怪的 (IMO) 代码。
try
{
if (helperMethod())
{
return 0;
}
return 0;
}
catch(Exception e)
{
// Log and throw
}
finally
{
// Do a lot of stuff after value has been returned
}
这位于一个方法中,该方法通过将 COM 对象传递到我的 DLL 来由 VBA 调用。当它刚运行时,我在 C# 中没有得到异常,但我得到了 VBA 异常。
当我在调试中运行它时,我在任何地方都没有遇到异常。
我的猜测是 finally 子句中的逻辑需要一秒钟的时间才能运行,而此时 0 已经被方法的主体返回。
我可以用几种方式重写它,但我不知道以这种方式编写代码是否很常见......?
谢谢
编辑: 会不会是当我返回 0 时 COM 对象被释放了?在这种情况下,它在 finally 子句中不再可用。
最佳答案
COMException 会使您的 .NET CLR 引擎崩溃,这样引擎就没有机会运行 finally 代码。在这些情况下,您会在事件日志中看到一个条目。
我在 WMI 中看到了很多这样的情况。 邪恶,邪恶......
关于c# - Return 和 finally 子句 - 不一致的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4398663/