OpCodes.Unbox 字段

定义

将值类型的已装箱的表示形式转换为其未装箱的形式。

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

字段值

注解

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

格式 程序集格式 说明
79 <T> 取消框 valType obj中提取值类型数据,其装箱表示形式。

堆栈过渡行为(按顺序排列)是:

  1. 对象引用被推送到堆栈上。

  2. 对象引用从堆栈中弹出并取消装箱到值类型指针。

  3. 将值类型指针推送到堆栈上。

值类型在公共语言基础结构 (CLI) 中具有两个单独的表示形式:

  • 当值类型嵌入到另一个对象中时使用的“raw”窗体。

  • “装箱”窗体,其中值类型中的数据包装 (装箱) 到 对象中,以便它可以作为独立实体存在。

指令 unbox 将对象引用 (类型 O) (值类型的装箱表示形式)转换为值类型指针 (托管指针、类型 &) 及其未装箱形式的值类型指针。 提供的值类型 (valType) 是一个元数据标记,指示装箱对象中包含的值类型。

Box(创建值类型的副本以用于 对象)不同, unbox 不需要从 对象复制值类型。 通常,它只是计算已装箱对象内已存在的值类型的地址。

InvalidCastException 如果 对象未装箱为 valType,则会引发 。

NullReferenceException 如果对象引用为 null 引用,则引发 。

TypeLoadException 如果找不到值类型 valType ,则引发 。 当 Microsoft 中间语言 (MSIL) 指令转换为本机代码而不是在运行时时,通常会检测到此情况。

以下 Emit 方法重载可以使用 unbox 操作码:

适用于

产品 版本
.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