如何使用ILGenerator创建ref局部变量并生成对应IL代码?
使用ILGenerator创建引用类型局部变量的方法
C#代码片段
int x = 10; ref int y = ref x;
编译后对应的IL代码
.locals init ( [0] int32 x, [1] int32& y ) ldc.i4.s 10 stloc.0 ldloca.s 0 stloc.1 ret
问题
请问如何使用ILGenerator创建int32&类型的局部变量?我查看了ILGenerator.DeclareLocal方法,但未找到合适的重载。
解决方案
要创建int32&(对应C#里的ref int)类型的局部变量,核心是先构造出该引用类型,再传递给DeclareLocal方法:
- 调用
typeof(int).MakeByRefType()生成int类型的引用类型(即int&,对应IL里的int32&) - 将生成的类型传入
ILGenerator.DeclareLocal方法即可
示例代码如下:
// 假设已获取ILGenerator实例ilGen Type intByRefType = typeof(int).MakeByRefType(); LocalBuilder localY = ilGen.DeclareLocal(intByRefType);
这样创建出的局部变量,就和你提供的IL代码中定义的int32& y完全一致。
内容的提问来源于stack exchange,提问作者Jonas
相关产品推荐
相关产品推荐

