在C#中将IList转换为数组

时间:2012-02-29 21:35:33

标签: c# arrays ilist .net

我想将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但我需要,再次,常见的情况)。

4 个答案:

答案 0 :(得分:30)

您正在创建Array值的数组。 1是int,而不是Array。你应该:

IList list = new ArrayList();
list.Add(1);
Array array = new int[list.Count];
list.CopyTo(array, 0);

或者,理想情况下,不要使用非泛型类型...使用列表而不是ArrayListIList<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();