C# 如何加载静态场?

C# 如何加载静态场?,c#,.net,reflection.emit,il,ilasm,C#,.net,Reflection.emit,Il,Ilasm,我正在通过Reflection.Emit生成一个静态字段num1、num2等的类型 现在我不知道如何发出代码,将生成类型中静态字段的内容加载到静态方法的计算堆栈中。 到目前为止,我尝试的是: generator.Emit(Opcodes.Ldarg, 0); generator.Emit(Opcodes.Ldfld, "num1"); 但很明显,这是行不通的,因为它试图在“this”上加载一个实例字段,而该字段并没有提供给静态方法 我应该使用哪个操作码访问静态字段? 因此,假设您之前已经在类似

我正在通过Reflection.Emit生成一个静态字段num1、num2等的类型

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

generator.Emit(Opcodes.Ldarg, 0);
generator.Emit(Opcodes.Ldfld, "num1");
但很明显,这是行不通的,因为它试图在“this”上加载一个实例字段,而该字段并没有提供给静态方法

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


因此,假设您之前已经在类似
FieldBuilder num1=…
的地方创建了num1,您可以通过
generator.Emit(Opcodes.ldsfld,num1)将其加载到堆栈中

如果我没有FieldInfo实例,但我有名字,我可以这样做吗?(我已经创建了字段,但使用了另一种方法)。好吧,这将是一个棘手的问题。您至少应该传递TypeBuilder,以便从那里获取FieldInfo。