【问题标题】:C# equivalent of "EXCEPTION_CONTINUE_EXECUTION" with exception filter具有异常过滤器的“EXCEPTION_CONTINUE_EXECUTION”的 C# 等效项
【发布时间】:2009-08-27 04:54:44
【问题描述】:

是否可以像 C++ 那样使用 C# 用过滤器函数做一些异常处理,并在异常发生的地方继续执行?

谢谢,

【问题讨论】:

    标签: c# exception filter


    【解决方案1】:

    CLR 支持通过 filter / endfilter IL 子句进行两次异常分派的异常过滤器,但 C# 编译器不支持直接实现它的低级指令。

    此外,支持的子句中仅有的两个返回值是 0 和 1,它们分别引用 exception_continue_searchexception_execute_handler。因此,在异常点恢复执行不是一种选择。

    【讨论】:

    • "除非使用过滤器处理程序,否则无法在异常位置恢复执行。" from 12.4.2.5 异常处理概述。
    • @tgiphil 当然,但如前所述,filter/endfilter 的唯一指定返回值是继续搜索和执行处理程序。现在,如果您返回 -1(或 0xffffffff),它可能与 SEH 一样工作;见msdn.microsoft.com/en-us/library/windows/desktop/…
    【解决方案2】:

    这听起来像 VB 的 On Error Goto X/Resume Next 模式。如果是这样,那么没有。

    VB.NET 允许这样做,但主要是为了向后兼容。在 .NET 中是一个非常糟糕的 hack,我从未见过有人真正使用它。

    【讨论】:

      【解决方案3】:

      这是不可能的。

      .NET 有一个异常过滤机制,但它没有通过 C# 语言公开。另外,我不相信它允许您在发生异常的地方恢复执行。更多的是根据异常的类型来决定是否捕获异常。

      【讨论】:

        猜你喜欢
        • 2011-05-15
        • 1970-01-01
        • 1970-01-01
        • 2013-01-15
        • 1970-01-01
        • 1970-01-01
        • 2013-09-04
        • 1970-01-01
        相关资源
        最近更新 更多