C#IL Emiter加载变量类型对象

时间:2017-06-15 00:45:33

标签: c# cil

所以我有类似的东西

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

有人可以帮助我吗?谢谢

1 个答案:

答案 0 :(得分:1)

你不能。根据您生成的IL的调用方式和时间,可能无法访问该对象(例如,您可以将IL保存到程序集并从单独的进程中使用它。)

您需要的是一些可以恢复对象的代码。您可以通过将对象保存到字段(可能是static)然后加载,如果IL仅用于当前进程/应用程序域,则可以这样做。

另一种选择是使用某种序列化来保存对象,然后在IL中对其进行反序列化,假设该对象可以被序列化。