我想要一个List<object>
强制转换为强类型数组。问题是我在编译时不知道列表类型,因为它可能是许多对象中的一个。
基本上如果我Type objectType = list[0].GetType()
,我希望能够拨打list.Cast<objectType>().ToArray()
。
我该怎么做?我尝试使用Reflection如下:
Type listType = list[0].GetType();
MethodInfo castMethod = typeof(Enumerable).GetMethod("Cast", BindingFlags.Static | BindingFlags.Public);
castMethod = castMethod.MakeGenericMethod(new Type[] { listType });
castMethod.Invoke(null, new object[] { list});
调用返回一个似乎没有公共方法的CastIterator。
答案 0 :(得分:4)
您可以使用:
MethodInfo castMethod = typeof(Enumerable).GetMethod("Cast", BindingFlags.Static | BindingFlags.Public);
castMethod = castMethod.MakeGenericMethod(new Type[] { listType });
object castIterator = castMethod.Invoke(null, new object[] { list});
var toArrayMethod = typeof(Enumerable).GetMethod("ToArray", BindingFlags.Static | BindingFlags.Public);
toArrayMethod = toArrayMethod.MakeGenericMethod(new Type[] { listType });
object theArray = toArrayMethod.Invoke(null, new[] {castIterator});
在此结束时,theArray
将是一个强类型的数组。