对象列表到预定类型的列表
本文关键字:列表 类型 对象 | 更新日期: 2023-09-27 18:34:07
如何以更通用的方式将原始列表转换为另一个列表。目标类型仅在运行时已知。
我尝试了以下内容,但我得到了一个填充了目的地类型元素的List<object>
。
public static object ToList(List<object> original,Type destinationType)
{
return
original
.Select(v => Convert.ChangeType(v, destinationType, CultureInfo.InvariantCulture))
.ToList();//List<object> is returned, I want a List<destinationType>
}
试试这个:
var list = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(destinationType));
foreach (var element in original)
{
var converted = Convert.ChangeType(element, destinationType, CultureInfo.InvariantCulture);
list.Add(converted);
}
return list;
代码在运行时创建List<destinationType>
实例,然后将所有转换后的元素添加到其中并返回它。
如果可以使该方法通用,这是最好的解决方案。
public static object ToList<T>(List<object> original)
{
var type = typeof(T);
return original
.Select(v => (T)Convert.ChangeType(v, type, CultureInfo.InvariantCulture))
.ToList();
}
否则,选择@Rafal的解决方案。