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

时间:2018-07-23 14:50:17

标签: c# cil

我需要获取字段作为“对象”的类型。

这是该方法的IL:

<app-navi [myrole]='myrole'></app-navi>
<br>
<router-outlet></router-outlet>

我应该添加什么才能投射到对象上。

如果字段是我必须添加的值类型,则感谢在线C#转换为IL工具

gen.Emit(OpCodes.Ldarg_0);
gen.Emit(OpCodes.Ldfld, field);
gen.Emit(OpCodes.Ret);

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

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

另一个问题:

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

1 个答案:

答案 0 :(得分: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);
}