使用英语阅读

通过


OpCodes.Endfinally 字段

定义

将控制从异常块的 faultfinally 子句转移回公共语言结构 (CLI) 异常处理程序。

public static readonly System.Reflection.Emit.OpCode Endfinally;

字段值

注解

下表列出了指令的十六进制和 Microsoft 中间语言 (MSIL) 程序集格式,以及简短的参考摘要:

格式 程序集格式 说明
DC endfinally

endfault
finally结束异常块的 或 fault 子句。

此指令没有堆栈转换行为。

Endfinallyendfault 发出 或 fault 子句结束的finally信号,以便堆栈展开可以继续,直到调用异常处理程序。 或 endfinallyendfault 指令将控制权传输回 CLI 异常机制。 然后,如果该机制使用 leave 指令退出了受保护的块,则该机制在链中搜索下 finally 一个子句。 如果已退出受保护的块并出现异常,CLI 将搜索下一个 finallyfault,或者输入在第一次异常处理过程中选择的异常处理程序。

指令 endfinally 只能在块中 finally 按词法显示。 endfilter与指令不同,块不要求以endfinally指令结尾,并且块内可以根据需要有任意数量的endfinally指令。 这些相同的限制适用于 endfault 指令和 fault 块。

控制不能传输到 finally (或 fault) 块,除非通过异常机制。 不能从 (或 fault) 块中转移finally控制,除非通过使用throw指令或执行 endfinally (或 endfault) 指令。 具体而言,不能“脱离”finally (或 fault) 块,也不能在 (或 Leave) 块中finally执行 Retfault 指令。

请注意, endfaultendfinally 指令是别名 - 它们对应于相同的操作码。

以下 Emit 方法重载可以使用 endfinally (endfault) opcode 以及 ILGenerator 方法 EndExceptionBlock

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0