gpt4 book ai didi

c# - 为什么使用 Delegate.CreateDelegate 时会出现此错误 'binding to target method'?

转载 作者:行者123 更新时间:2023-11-30 22:24:09 25 4
gpt4 key购买 nike

运行 Run2 方法。但是Run方法没有运行。是什么原因 ?两种方法之间的唯一区别是因为参数。

public class MyClass
{
public string Name { get; set; }
}

[TestFixture]
public class Test
{
public IEnumerable<T> TestMethod<T>(int i)
{
//do something
return null;
}

public IEnumerable<T> TestMethod2<T>()
{
//do something
return null;
}

[Test]
public void Run()
{
MethodInfo mi = this.GetType().GetMethod("TestMethod").MakeGenericMethod(typeof(MyClass));
var del = Delegate.CreateDelegate(typeof(Func<IEnumerable<MyClass>>), this, mi);
var list = (IEnumerable<MyClass>)del.DynamicInvoke(0);
}

[Test]
public void Run2()
{
MethodInfo mi = this.GetType().GetMethod("TestMethod2").MakeGenericMethod(typeof(MyClass));
var del = Delegate.CreateDelegate(typeof(Func<IEnumerable<MyClass>>), this, mi);
var list = (IEnumerable<MyClass>)del.DynamicInvoke();
}
}

最佳答案

问题出在这里:

var del = Delegate.CreateDelegate(typeof(Func<IEnumerable<MyClass>>), this, mi);

您说过要将您的方法绑定(bind)到 Func<IEnumerable<MyClass>>委托(delegate),但实际方法应该是 Func<int, IEnumerable<MyClass>> (因为 intTestMethod 的参数)。以下应该更正它:

var del = Delegate.CreateDelegate(typeof(Func<int, IEnumerable<MyClass>>), this, mi);

关于c# - 为什么使用 Delegate.CreateDelegate 时会出现此错误 'binding to target method'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12939108/

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