按照this post上的示例,我发现了如何动态创建泛型类型的列表。
现在,我的问题是我想将项目从未知来源列表添加到创建的列表中,有什么方法可以实现?

编辑
我从包含业务对象的源列表开始,但是由于需要下游绑定,因此我绝对需要正确的输出列表类型。

我的非编译代码如下:

IList<object> sourceList; // some list containing custom objects
Type t = typeof(IList).MakeGenericType(sourceList[0].GetType());
IList res = (IList)Activator.CreateInstance(t);
foreach (var item in sourceList) {
    reportDS.Add(item); // obviously does not compile
}

最佳答案

我建议将您的代码移到通用类或函数中,将反射移到更高的层次:

private static List<T> CloneListAs<T>(IList<object> source)
{
    // Here we can do anything we want with T
    // T == source[0].GetType()
    return source.Cast<T>().ToList();
}


调用它:

IList<object> sourceList; // some list containing custom objects
// sourceList = ...

MethodInfo method = typeof(this).GetMethod("CloneListAs");
MethodInfo genericMethod = method.MakeGenericMethod(sourceList[0].GetType());

var reportDS = genericMethod.Invoke(null, new[] {sourceList});

10-01 06:50