我有一个列表,只能在运行时通过反射找到对象的类型。但是当我尝试将列表分配给实际实体时,它会抛出错误,因为"对象无法转换"。以下是代码,
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`
答案 0 :(得分:3)
您的obj
对象不是Customer
,而是List
Customer
。
所以你应该这样得到它的类型:
var listType = typeof(List<>).MakeGenericType(t);
但是您无法将对象转换为此listType
,您将获得Exception
,List
无法实现IConvertible
界面
解决方案是:只需创建新列表并将所有数据复制到其中:
object data = Activator.CreateInstance(listType);
foreach (var o in obj)
{
listType.GetMethod("Add").Invoke(data, new []{o} );
}