如何使用反射调用具有泛型返回类型的方法

时间:2010-06-08 09:37:53

标签: c# generics 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来解析返回类型。另外,如果我使用typeof(SomeClass<>)而不是lSomeClassInstance.GetType()(应该有已解析的类型),GetMethod("GetStuff")将返回null!

更新

我找到了解决方案,很快就会发布答案。

1 个答案:

答案 0 :(得分:1)

无论出于何种原因,即使在解析了类型之后,GetClass返回的SomeClass实例也不允许您调用GetStuff方法。

最重要的是你应该首先构造SomeClass,然后调用该方法。像这样:

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