C# 动态方法 - 具有“对象”返回类型的字段 getter

我需要将该字段作为“对象”的类型。


这是该方法的 IL:


gen.Emit(OpCodes.Ldarg_0);

gen.Emit(OpCodes.Ldfld, field);

gen.Emit(OpCodes.Ret);

我应该添加什么来强制转换为对象。


感谢在线 C# 到 IL 工具,如果字段是值类型,我必须添加


OpCodes.Box

但是如果字段不是值类型怎么办。


我应该获取字段类型并为引用类型字段和值类型字段创建两个单独的动态方法。


另一个问题 :


我如何销毁动态方法并重新创建它。(生命周期?)


莫回无
浏览 207回答 1
1回答

撒科打诨

您需要装箱值类型的结果,例如: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);}
打开App,查看更多内容
随时随地看视频慕课网APP