我有一个泛型如下。在C#运行时使用反射调用ToList()方法#
public class PaginatedList<T> : List<T>
{...}
我只是想在运行时使用反射来调用该对象上的ToList()方法。
有人可以请帮忙。
我来这么远只。
MethodInfo toListMethod = typeof(Enumerable).GetMethod("ToList");
var constructedToList = toListMethod.MakeGenericMethod(TypeObjectOfT);
constructedToList.Invoke(paginatedListObject, null);
我在与消息的最后一行,参数数量不匹配得到例外。我觉得前两个步骤都可以,因为我已经检查了toListMethod.ToString()
和constructedToList.ToString()
。他们给了我以下的输出,我觉得是正确的。
System.Collections.Generic.List`1[TSource] ToList[TSource](System.Collections.Generic.IEnumerable`1[TSource])
System.Collections.Generic.List`1[AvbhHis.BL.Entities.PatientCategory] ToList[PatientCategory](System.Collections.Generic.IEnumerable`1[AvbhHis.BL.Entities.PatientCategory])
问题: 1.我说得对不对这么远?
MakeGenericMethod()
方法的参数应该是什么。在我的情况下,它是运行时类型T的对象的实例类型。Invoke方法调用似乎存在一些问题。作为第二个参数传递null是否正确?第一个参数应该是PaginatedList类型的对象的权利?
我的能量不足,非常有帮助。
@Hani,你有点迷惑: 'Enumerable'是一个包含'IEnumerable'的扩展方法的类。另外[msdn说,_Enumerable ** does **有ToList()_](https://msdn.microsoft.com/en-us/library/bb342261(v = vs.110).aspx) –
Grundy
混合泛型和反射通常是一种代码异味 - 是否没有办法在您的情况下一般地调用“ToList”? –
@Grundy你感到困惑 - OP通过反射在'Enumerable'上调用'ToList'。 –