似乎我偶然发现了一个异常仍然可用于catch块之后的情况。在我遇到它的情况下它是100%可重复的,但是我无法进行完全重现这种情况的测试。
有关调试情况,请参阅此图片:
情况如下:
最终结果:在catch块之后的所有代码中Marshall.GetExceptionCode()!= 0。
有没有人知道这里发生了什么?
答案 0 :(得分:2)
堆栈不属于您,它属于运行时。您的.NET代码不应该依赖于处理堆栈的精确方式。
Marshal.GetExceptionCode
专门用于互操作和编译器支持,并且不应该真正用在.NET用户代码中,因为你不知道两行(看似无关紧要)的.NET代码行之间发生了什么。
坚持规范,并停止依赖未定义的行为。它不像.NET中存在大量未定义的行为。