【发布时间】:2009-08-27 04:54:44
【问题描述】:
是否可以像 C++ 那样使用 C# 用过滤器函数做一些异常处理,并在异常发生的地方继续执行?
谢谢,
【问题讨论】:
是否可以像 C++ 那样使用 C# 用过滤器函数做一些异常处理,并在异常发生的地方继续执行?
谢谢,
【问题讨论】:
CLR 支持通过 filter / endfilter IL 子句进行两次异常分派的异常过滤器,但 C# 编译器不支持直接实现它的低级指令。
此外,支持的子句中仅有的两个返回值是 0 和 1,它们分别引用 exception_continue_search 和 exception_execute_handler。因此,在异常点恢复执行不是一种选择。
【讨论】:
filter/endfilter 的唯一指定返回值是继续搜索和执行处理程序。现在,如果您返回 -1(或 0xffffffff),它可能与 SEH 一样工作;见msdn.microsoft.com/en-us/library/windows/desktop/…
这听起来像 VB 的 On Error Goto X/Resume Next 模式。如果是这样,那么没有。
VB.NET 允许这样做,但主要是为了向后兼容。在 .NET 中是一个非常糟糕的 hack,我从未见过有人真正使用它。
【讨论】:
这是不可能的。
.NET 有一个异常过滤机制,但它没有通过 C# 语言公开。另外,我不相信它允许您在发生异常的地方恢复执行。更多的是根据异常的类型来决定是否捕获异常。
【讨论】: