2012-10-17 41 views
2

運行Run2方法。但Run方法不運行。是什麼原因 ? 兩種方法之間的唯一區別是因爲參數。爲什麼我使用Delegate.CreateDelegate獲得這個錯誤'綁定到目標方法'?

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

回答

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); 
相關問題