所以我有类似的东西
public void test(string name, Func<object> fuc)
{
object x = fuc();
FieldInfo fdt = Dest.GetField(nameDest, BindingFlags.NonPublic |
BindingFlags.Public | BindingFlags.Instance);
ilGenerator.Emit(OpCodes.Ldarg_0);
ilGenerator.Emit(OpCodes.Ldfld, fieldBuilder);
//and here i want to load the x
ilGenerator.Emit(OpCodes.Stfld, fdt);
}
有人可以帮助我吗?谢谢
答案 0 :(得分:1)
你不能。根据您生成的IL的调用方式和时间,可能无法访问该对象(例如,您可以将IL保存到程序集并从单独的进程中使用它。)
您需要的是一些可以恢复对象的代码。您可以通过将对象保存到字段(可能是static
)然后加载,如果IL仅用于当前进程/应用程序域,则可以这样做。
另一种选择是使用某种序列化来保存对象,然后在IL中对其进行反序列化,假设该对象可以被序列化。