运行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();
}
}
答案 0 :(得分:3)
问题在于:
var del = Delegate.CreateDelegate(typeof(Func<IEnumerable<MyClass>>), this, mi);
您已经说过将方法绑定到Func<IEnumerable<MyClass>>
委托,但实际方法应该是Func<int, IEnumerable<MyClass>>
(因为int
的{{1}}参数)。以下内容应予以纠正:
TestMethod