0

我有一个正在构建动态方法的函数。作为此动态方法的一部分,它正在调用生成时已知的操作。作为一个最小的可重现示例,请考虑以下 C# 代码:

using System.Reflection.Emit;

static class Program {
  static Action MakeAction(Action action) {
    DynamicMethod method = new DynamicMethod("test", null, null);
    ILGenerator generator = method.GetILGenerator();
    generator.Emit(OpCodes.Call, action.Method);
    generator.Emit(OpCodes.Ret);
    return method.CreateDelegate<Action>();
  }

  static void Main() {
    MakeAction(() => Console.WriteLine("hello"))();
  }
}

当我运行它时,我得到一个 System.InvalidProgramException。这样做的正确方法是什么?

4

0 回答 0