gpt4 book ai didi

c# - Return 和 finally 子句 - 不一致的行为

转载 作者:行者123 更新时间:2023-11-30 16:32:06 24 4
gpt4 key购买 nike

我遇到了行为不一致的稍微奇怪的 (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/

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