[英]How to invoke a method with a generic return type using reflection
我正在嘗試使用具有通用返回類型的反射調用方法,如下所示:
public class SomeClass<T>
{
public List<T> GetStuff();
}
我通過調用存儲庫的GetClass<T>
泛型方法獲得SomeClass的實例。
MethodInfo lGetSomeClassMethodInfo = typeof(IRepository)
.GetMethod("GetClass")
.MakeGenericMethod(typeof(SomeClass<>);
object lSomeClassInstance = lGetSomeClassMethodInfo.Invoke(
lRepositoryInstance, null);
之后,這是我嘗試調用GetStuff方法的地方:
typeof(SomeClass<>).GetMethod("GetStuff").Invoke(lSomeClassInstance, null)
我對方法具有通用參數的事實感到驚訝。 但是,我不能使用MakeGenericMethod來解析返回類型。 另外,如果我使用lSomeClassInstance.GetType()
代替typeof(SomeClass<>)
(應該具有已解析的類型),則GetMethod("GetStuff")
返回null!
UPDATE
我已經找到了解決方案,並將在不久后發布答案。
無論出於何種原因,即使解析了類型之后, GetClass
返回的SomeClass實例也不允許您調用GetStuff
方法。
最重要的是,您應該首先簡單地構造SomeClass,然后調用該方法。 像這樣:
typeof(SomeClass<>)
.MakeGenericType(StuffType)
.GetMethod("GetStuff")
.Invoke(lSomeClassInstance, null);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.