2016-02-05 23 views
0

我有一些麻煩,營造合適的委託爲這個實例方法:創建一個委託時,參數的確切類型是未知

public T AddComponent<T>() where T : Component 
{ 
     .... 
} 

我使用反射來獲取特定的MethodInfo和Delegate.CreateDelegate我得到一個錯誤綁定到目標方法

private delegate T AddComponent<out T>(); 
private static AddComponent<Component> AddC { get; set; } 
public void Test() 
{ 
    var go = new GameObject(); 
    var targetAddComponent = 
    typeof (GameObject).GetMethods().First(m => m.Name == "AddComponent" && m.GetParameters().Length == 0);  
    AddC = (AddComponent<Component>) Delegate.CreateDelegate(typeof (AddComponent<Component>), go, targetAddComponent, true); 
    .... 
} 

你有什麼我做錯了什麼線索?

+1

令人難以置信的是,您已經將方法和委託命名爲相同的東西。 –

回答

2

方法信息是方法GameObject.AddComponent<T>方法的信息,它返回T的代表,您已令人難以置信的容易混淆的命名一樣的方法,一定要到返回Component的方法。你做了什麼導致T等於組件?沒有。

換句話說:方法info是一個方法信息,它在實際上並不是一個可調用的方法,直到它被構建。這是製作方法的通用模式,而不是方法。如果你想爲它做一個委託,讓它成爲一種方法。您需要爲該方法中的類型參數T提供一個類型參數。

+0

好的,我會嘗試MakeGenericMethod,謝謝。 –

+0

var targetAddComponent = typeof(GameObject).GetMethods()。First(m => m.Name ==「AddComponent」&& m.GetParameters()。Length == 0).MakeGenericMethod(typeof(Component)); –

相關問題