将IEnumerable <t>转换为运行时类型

时间:2017-06-14 13:40:19

标签: c#

如何使用运行时中定义的类型实现与listOfBaseItems.Cast<Child>()类似的东西? e.g。

var t = typeof(Child); // the type would be a method argument in my case
var desiredType = typeof(List<>).MakeGenericType(t);
var castedList = Convert.ChangeType(listOfBaseItems, desiredType);

我得到一个例外,即项目没有实现IConvertible。我错过了什么?

1 个答案:

答案 0 :(得分:4)

假设强制转换是合法的(例如listOfBaseItems实际上包含子项),那么您可以在运行时调用Cast(这是Enumerable类中的通用扩展方法)这样:

var result = 
    typeof(Enumerable)
        .GetMethod("Cast")
        .MakeGenericMethod(t)
        .Invoke(null, new object[] {listOfBaseItems});