【发布时间】:2018-07-23 14:50:16
【问题描述】:
我需要将该字段作为“对象”的类型。
这是方法的 IL:
gen.Emit(OpCodes.Ldarg_0);
gen.Emit(OpCodes.Ldfld, field);
gen.Emit(OpCodes.Ret);
我应该添加什么来投射到对象。
感谢在线 C# 到 IL 工具,如果字段是值类型,我必须添加
OpCodes.Box
但是如果字段不是值类型怎么办。
我应该获取字段类型并为引用类型字段和值类型字段创建两个单独的动态方法吗?
另一个问题:
我怎样才能破坏动态方法并重新创建它。 (生命周期?)
【问题讨论】:
-
属性类型是
object吗? -
什么意思 => 属性类型
object? -
除非我弄错了,否则我认为“字段吸气剂”是指财产吸气剂?如果有,该物业的类型是什么?
-
那么如果字段的类型是值类型则需要box,否则不需要。但是您不需要编写其他方法,您可以添加条件检查字段的类型并发出
OpCodes.Box。 -
关于你的问题 #2,你需要卸载 appdomain 来销毁动态创建的项目。