OpCodes.Ldind_I 字段

定义

native int 类型的值作为 native int 间接加载到计算堆栈上。

C#
public static readonly System.Reflection.Emit.OpCode Ldind_I;

字段值

注解

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

格式 程序集格式 说明
4D ldind.i native int 地址 addr 处的值作为 native int加载到堆栈上。

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

  1. 将地址推送到堆栈上。

  2. 地址从堆栈中弹出;提取位于地址处的值。

  3. 提取的值将推送到堆栈上。

指令ldind.i将指定地址 (类型的 native int&或 *) 作为 间接加载native int到堆栈native int上。

ldind所有指令都是指定相应内置值类的指令的快捷方式Ldobj

请注意,小于 4 个字节的整数值在加载到评估堆栈上时会扩展为 int32 (不 native int) 。 浮点值在加载到计算堆栈上时转换为 F 类型。

格式正确的 Microsoft 中间语言 (MSIL) 可确保 ldind 以与指针类型一致的方式使用指令。

最初推送到堆栈的地址必须与计算机上对象的自然大小保持一致, NullReferenceException 否则, (查看 Unaligned 预防措施的前缀说明) 可能会出现 。 例如 Ldloca ,返回地址的所有 MSIL 指令的结果 (和 Ldarga) 安全对齐。 对于大于 1 字节的数据类型,字节排序依赖于目标 CPU。 依赖于字节排序的代码可能不会在所有平台上运行。

NullReferenceException 如果检测到无效的地址,则可能会引发。

以下 Emit 方法重载可以使用 ldind.i opcode:

适用于

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