1

如何以更通用的方式将原始列表转换为另一个列表。目标类型仅在运行时已知。

我尝试了以下方法,但我得到了一个List<object>充满 DestinationType 类型的元素。

    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>
    }
4

2 回答 2

2

试试这个:

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>然后将所有转换后的元素添加到它并返回它。

于 2013-10-07T09:22:17.530 回答
2

如果您可以使方法通用,这是最好的解决方案。

    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 的解决方案..

于 2013-10-07T09:26:40.097 回答