[英]C# dynamic method - Field getter with “Object” return type
我需要获取字段作为“对象”的类型。
这是该方法的IL:
gen.Emit(OpCodes.Ldarg_0);
gen.Emit(OpCodes.Ldfld, field);
gen.Emit(OpCodes.Ret);
我应该添加什么才能投射到对象。
多亏了在线C#到IL工具,如果字段是值类型,我必须添加
OpCodes.Box
但是如果字段不是值类型该怎么办。
我应该获取字段类型并为引用类型字段和值类型字段创建两个单独的动态方法。
另一个问题 :
我如何销毁动态方法并重新创建它。 (生命周期?)
您需要将值类型结果装箱,例如:
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.