我想将IList转换为数组: 请看我的代码:
IList list = new ArrayList();
list.Add(1);
Array array = new Array[list.Count];
list.CopyTo(array, 0);
为什么我得到 System.InvalidCastException:源数组中至少有一个元素无法转换为目标数组类型?假设我不能将 ArrayList 用作 list 变量的类型,那怎么解决?
更新1:我使用.NET 1.1。所以我不能使用Generics,Linq等。我只想收到最常见情况的结果 - 整数是作为示例给出的,我需要这个代码适用于所有类型,所以我在这里使用 Array (也许我错误地使用Array但我需要,再次,常见的情况)。
答案 0 :(得分:30)
您正在创建Array
值的数组。 1是int
,而不是Array
。你应该:
IList list = new ArrayList();
list.Add(1);
Array array = new int[list.Count];
list.CopyTo(array, 0);
或者,理想情况下,不要使用非泛型类型...使用列表而不是ArrayList
,IList<T>
而不是IList
等。
编辑:请注意,第三行很容易:
Array array = new object[list.Count];
代替。
答案 1 :(得分:18)
您可以使用Cast和ToArray:
Array array = list.Cast<int>().ToArray();
答案 2 :(得分:4)
我很惊讶
Array array = new Array[list.Count];
即使编译,但它不会做你想要的。使用
object[] array = new object[list.Count];
并且,标准备注:如果您可以使用C#3或更高版本,请尽可能避免使用ArrayList。你可能会对List<int>
答案 3 :(得分:1)
最紧凑的解决方案可能是这样:
Enumerable.Range(0, list.Count).Select(i => list[i]).ToArray();