我有新问题。我的代码:
.method public static void Main() cil managed
{
.entrypoint
// Code size 3 (0x3)
.maxstack 1
IL_0000: ldnull
IL_0001: stloc.0
IL_0002: ret
} // end of method Program::Main
C#代码:
il.Emit(OpCodes.Ldnull);
il.Emit(OpCodes.Stloc_0);
il.Emit(OpCodes.Ret);
我通过System.Reflection和System.Reflection.Emit类生成此代码。有谁知道为什么这不起作用?请帮忙。
一个小问题 - 我应该生成构造函数吗?
答案 0 :(得分:7)
您尝试在本地0(stloc.0
)中存储null,但实际上并未定义任何本地。
您需要使用DeclareLocal
方法来定义本地,然后您可以将其传递给接受LocalBuilder的Emit
重载(例如,您可以使用它来发出{{1}操作码,然后是你的LocalBuilder);或者你可以继续使用stloc
,因为你知道只有一个本地人。