将List <object>动态转换为List <customer>

时间:2016-12-22 21:33:20

标签: c# .net reflection system.reflection

我有一个列表,只能在运行时通过反射找到对象的类型。但是当我尝试将列表分配给实际实体时,它会抛出错误,因为&#34;对象无法转换&#34;。以下是代码,

var obj = new List<Object>();
obj.Add(cust1);
obj.Add(Cust2);
Type newType = t.GetProperty("Customer").PropertyType// I will get type from property
var data= Convert.ChangeType(obj,newType); //This line throws error`

1 个答案:

答案 0 :(得分:3)

您的obj对象不是Customer,而是List Customer。 所以你应该这样得到它的类型:

var listType = typeof(List<>).MakeGenericType(t);

但是您无法将对象转换为此listType,您将获得ExceptionList无法实现IConvertible界面

解决方案是:只需创建新列表并将所有数据复制到其中:

object data = Activator.CreateInstance(listType);
foreach (var o in obj)
{
     listType.GetMethod("Add").Invoke(data, new []{o} );
}