c#将List <object>转换为List <! - ? - > </object>

时间:2013-04-25 00:02:42

标签: c# c#-4.0

目前我有一个IList<object>类型的对象,我需要使用Type对象转换为另一种类型的IList

例如

Type t = typeof(MyType);
var list = OtherClass.MyFunction(myParam param);

var list 的类型为IList<object>,我需要它为IList<t>

类型

目前我有一个静态函数并调用反射,但这是在一个循环中调用的,需要最小化在循环中花费的最长时间。

任何人都知道在不使用反射的情况下执行此转换的任何其他方法吗?

委托代表可能吗?

2 个答案:

答案 0 :(得分:5)

您可以使用Enumerable.Cast<T>()

var myList = list.Cast<MyType>().ToList();

答案 1 :(得分:0)

如果在编译时不知道T,我想你可以:

var type = typeof(int);
IList<object> myList = (new object[]{1, 2, 3, 4, 5}).ToList();
var mi = typeof(Enumerable).GetMethod("Cast");
var mRef = mi.MakeGenericMethod(type);
object myIEnumerableOfInt = mRef.Invoke(null, new object[]{myList});
mi = typeof(Enumerable).GetMethod("ToList");
mRef = mi.MakeGenericMethod(type);
IList myIListOfInt = (IList)mRef.Invoke(null, new object[]{myIEnumerableOfInt});

...但是在这里使用此反映意味着您永远无法将其称为IList<int>,因此您在代码中可以推断的最多是myIListOfIntIList这里的铸造是完全没用的。