我正在尝试使用具有泛型返回类型的反射调用方法,如下所示:
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!
更新
我找到了解决方案,很快就会发布答案。
答案 0 :(得分:1)
无论出于何种原因,即使在解析了类型之后,GetClass
返回的SomeClass实例也不允许您调用GetStuff
方法。
最重要的是你应该首先构造SomeClass,然后调用该方法。像这样:
typeof(SomeClass<>)
.MakeGenericType(StuffType)
.GetMethod("GetStuff")
.Invoke(lSomeClassInstance, null);