为什么我得到这个错误“绑定到目标方法”使用Delegate.CreateDelegate?(Why

2019-09-24 05:47发布

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

Answer 1:

问题就在这里:

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

你说你的绑定方法将一个Func<IEnumerable<MyClass>>代表,但实际的方法应该是Func<int, IEnumerable<MyClass>> (因为的int参数TestMethod )。 以下应更正:

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


文章来源: Why do I get this error 'binding to target method' using Delegate.CreateDelegate?
标签: c# delegates