为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
莫回无 2021-10-24 14:07:14
我需要将该字段作为“对象”的类型。这是该方法的 IL:gen.Emit(OpCodes.Ldarg_0);gen.Emit(OpCodes.Ldfld, field);gen.Emit(OpCodes.Ret);我应该添加什么来强制转换为对象。感谢在线 C# 到 IL 工具,如果字段是值类型,我必须添加OpCodes.Box但是如果字段不是值类型怎么办。我应该获取字段类型并为引用类型字段和值类型字段创建两个单独的动态方法。另一个问题 :我如何销毁动态方法并重新创建它。(生命周期?)
查看完整描述

1 回答

?
撒科打诨

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);

}


查看完整回答
反对 回复 2021-10-24
  • 1 回答
  • 0 关注
  • 206 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信