2

我有一个List<object>我想强制转换为强类型数组。问题是我在编译时不知道列表类型,因为它可能是许多对象之一。

基本上,如果我有Type objectType = list[0].GetType()我希望能够调用list.Cast<objectType>().ToArray().

我怎样才能做到这一点?我尝试使用反射如下:

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。

4

1 回答 1

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将是一个强类型的数组。

于 2013-10-28T23:22:51.423 回答