如何加载静态字段?

use*_*443 2 .net c# il reflection.emit ilasm

我通过Reflection.Emit生成一个带有静态字段num1,num2等的Type.

现在我不知道如何发出代码,将生成的类型中的静态字段的内容加载到静态方法的评估堆栈中.到目前为止我尝试过的是:

generator.Emit(Opcodes.Ldarg, 0);
generator.Emit(Opcodes.Ldfld, "num1");
Run Code Online (Sandbox Code Playgroud)

但显然这不起作用,因为它试图在'this'上加载一个实例字段,而不提供给静态方法.

我应该使用哪种操作码来访问静态字段?

M.S*_*amm 12

Opcodes.Ldsfld

因此,假设您像FieldBuilder num1 = ...以前一样在某处创建了num1 ,您可以通过它将其加载到堆栈中generator.Emit(Opcodes.ldsfld, num1);