gpt4 book ai didi

c# - 如何发出调用动态方法的代码?

转载 作者:行者123 更新时间:2023-11-30 14:55:54 28 4
gpt4 key购买 nike

我正在尝试发出调用我之前发出的动态方法的代码:

iLGenerator.Emit(OpCodes.Call, dynamicMethod.GetMethodInfo());

它通过异常提示:“MethodInfo 必须是运行时 MethodInfo 对象”

有没有办法将动态方法转换为运行时方法?

最佳答案

据我所知,您已经使用 CreateDelegateDynamicMethod 编译成委托(delegate)。但是,如果您直接使用 DynamicMethod 对象作为 Emit 的参数,它应该可以工作。演示:

using System.Reflection;
using System.Reflection.Emit;

public class Program
{
public static void Main(string[] args)
{
var dynMethod = new DynamicMethod("test1", typeof(void), Type.EmptyTypes);
var gen = dynMethod.GetILGenerator();
gen.EmitWriteLine("Test");
gen.Emit(OpCodes.Ret);

var dynMethod2 = new DynamicMethod("test2", typeof(void), Type.EmptyTypes);
gen = dynMethod2.GetILGenerator();
gen.Emit(OpCodes.Call, dynMethod);
gen.Emit(OpCodes.Ret);
var method2 = (Action)dynMethod2.CreateDelegate(typeof(Action));
method2();
}
}

关于c# - 如何发出调用动态方法的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24276107/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com