2

Run2メソッドが実行されます。ただし、Runメソッドは実行されません。理由は何ですか ?2つの方法の唯一の違いは、パラメータのためです。

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

1 に答える 1

3

問題はここにあります:

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);
于 2012-10-17T16:42:19.927 に答える