2010-06-08 57 views
2

我試圖調用與反射的方法是有一個通用的返回類型,像這樣的調用方法與通用返回類型:如何使用反射

public class SomeClass<T> 
{ 
    public List<T> GetStuff(); 
}  

我得到SomeClass的實例有調用存儲庫的GetClass<T>通用方法。

MethodInfo lGetSomeClassMethodInfo = typeof(IRepository) 
    .GetMethod("GetClass") 
    .MakeGenericMethod(typeof(SomeClass<>); 
object lSomeClassInstance = lGetSomeClassMethodInfo.Invoke(
    lRepositoryInstance, null); 

之後,這是我嘗試調用GetStuff方法:

typeof(SomeClass<>).GetMethod("GetStuff").Invoke(lSomeClassInstance, null) 

我得到的事實,該方法具有通用參數異常。但是,我無法使用MakeGenericMethod來解析返回類型。另外,如果不是typeof(SomeClass<>)我使用lSomeClassInstance.GetType()(應該已經解決類​​型)GetMethod("GetStuff")返回null!

UPDATE

我已經找到了解決辦法,不久將發佈的答案。

回答

1

無論出於何種原因,即使在類型解析之後,由GetClass返回的SomeClass實例也不允許您調用GetStuff方法。

底線是,你應該簡單地構造SomeClass,然後調用該方法。像這樣:

typeof(SomeClass<>) 
    .MakeGenericType(StuffType) 
    .GetMethod("GetStuff") 
    .Invoke(lSomeClassInstance, null);