我需要将该字段作为“对象”的类型。这是该方法的 IL:gen.Emit(OpCodes.Ldarg_0);gen.Emit(OpCodes.Ldfld, field);gen.Emit(OpCodes.Ret);我应该添加什么来强制转换为对象。感谢在线 C# 到 IL 工具,如果字段是值类型,我必须添加OpCodes.Box但是如果字段不是值类型怎么办。我应该获取字段类型并为引用类型字段和值类型字段创建两个单独的动态方法。另一个问题 :我如何销毁动态方法并重新创建它。(生命周期?)
1 回答
![?](http://img1.sycdn.imooc.com/54584e2c00010a2c02200220-100-100.jpg)
撒科打诨
TA贡献1934条经验 获得超2个赞
您需要装箱值类型的结果,例如:
public void EmitFieldGetter(ILGenerator gen, FieldInfo field)
{
gen.Emit(OpCodes.Ldarg_0);
gen.Emit(OpCodes.Ldfld, field);
if (field.FieldType.IsValueType)
{
gen.Emit(OpCodes.Box, field.FieldType);
}
gen.Emit(OpCodes.Ret);
}
- 1 回答
- 0 关注
- 206 浏览
添加回答
举报
0/150
提交
取消