C# 使用反射强制转换将数据返回到列表

C# 使用反射强制转换将数据返回到列表,c#,reflection,ienumerable,C#,Reflection,Ienumerable,我有以下课程: public class MyExampleClass { public Prop1 { get; set; } public Prop2 { get; set; } } public MyExampleList { public List<MyClass> { get; set; } } 公共类MyExampleClass { 公共属性1{get;set;} 公共属性2{get;set;} } 公共MyExampleList {

我有以下课程:

public class MyExampleClass 
{
     public Prop1 { get; set; }
     public Prop2 { get; set; }
}

public MyExampleList
{
     public List<MyClass> { get; set; }
}
公共类MyExampleClass
{
公共属性1{get;set;}
公共属性2{get;set;}
}
公共MyExampleList
{
公共列表{get;set;}
}
这些都是例子。我有几个具有相同结构的类和列表

然后是一个静态类,它将使用以下数据处理多个类型列表:

public static WorkerClass
{
    public static List<T> GetListFromDb()
    {
         var list = new List<T>;

         ///  Do the job

         return list;
    }
}
公共静态工作类
{
公共静态列表GetListFromDb()
{
var列表=新列表;
///做好这项工作
退货清单;
}
}
然后我在代码的另一个点上进行了反射,我需要读取以下数据:

public static class AnotherWorker
{
    public static class DoSomething()
    {
        Type typeToUse = Assembly.GetType("WorkerClass");   
        var methodToCall = typeToUse.GetType("GetListFromDb");

        object returnList = methodToCall.Invoke(null, null);

        ///
        /// 
        /// ?? Stuck here... how to foreach each list element and 
        /// dynamically store it in a new List<class_name>, being class_name a string, not a class.
        ///
        foreach (var item in returnList)
        { 
             .

        }

    }
}
公共静态类另一个工人
{
公共静态类DoSomething()
{
Type-typeToUse=Assembly.GetType(“WorkerClass”);
var methodToCall=typeToUse.GetType(“GetListFromDb”);
objectreturnlist=methodToCall.Invoke(null,null);
///
/// 
///?卡在这里…如何处理每个列表元素和
///动态地将其存储在一个新列表中,将其命名为字符串,而不是类。
///
foreach(返回列表中的var项)
{ 
.
}
}
}
如何使用反射继续动态处理该列表,创建新对象并将属性从一个对象复制到另一个对象


谢谢您的帮助。

如果编译时T未知,则无法创建
列表的实例。实际上,这就是泛型的目的:强类型

foreach的
问题很简单:

object returnList = methodToCall.Invoke(null, null);
IEnumerable enumerable = returnList as IEnumerable;
if (enumerable != null)
{
   foreach (var item in enumerable)
   {
       // do the job with each item...
   }
}
更新:

您可以创建与对象相同的
列表
类型的另一个实例,如下所示:

Type listType = enumerable.GetType();
IList newList = Activator.CreateInstance(listType) as IList;
if (newList != null)
{
    foreach (var item in enumerable)
    {
        newList.Add(item);
    }
}

为什么要在这里使用反射?我建议只使用其他失败的反射。但在这个例子中,我缺少接口。有了界面,你会在几秒钟内解决这个问题。真正的系统要比这个复杂得多。。。所以我真的需要反思一下。