簡體   English   中英

如何使用反射調用具有通用返回類型的方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM