我正在使用 Reflection.Emit 创建一个程序集,我希望它调用一个特殊的回调。
这是代码的简化版本:
public void Call(ILGenerator il, Delegate action)
{
il.Emit(OpCodes.Call, action.Method);
}
public static void DoStuff()
{
Console.WriteLine("Action invoked!");
}
Call(CurrentMethod.ILGenerator, DoStuff);
此代码按预期工作。
但是,我想传递一个 lambda 表达式,如下所示:
Call(CurrentMethod.ILGenerator, () => Console.WriteLine("test"));
这次抛出以下异常:
System.MethodAccessException:尝试通过方法“.Run()”访问方法“Compiler.Test.ImportedFunctions.b__0()”失败。
有没有办法解决它?