在 C# 中将 IList 转换为数组

Posted

技术标签:

【中文标题】在 C# 中将 IList 转换为数组【英文标题】:Convert IList to array in C# 【发布时间】:2012-03-19 09:41:58 【问题描述】:

我想将 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。所以我不能使用泛型、Linq 等。我只想接收最常见情况的结果 - 以整数为例,我需要此代码适用于所有类型,所以我在这里使用 Array (也许我对使用 Array 有误,但我需要,再一次,常见的情况)。

【问题讨论】:

ArrayList 已过时。请改用List<T> 您使用的是 .NET 2.0 吗?如果你不是,那么使用泛型集合这一切都会变得简单得多。 ***.com/questions/268671/… 什么版本的 .NET? System.Linq 增加了一个很棒的功能ToArray() 【参考方案1】:

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

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

或者,理想情况下,不要使用非泛型类型开头...使用 List 而不是 ArrayListIList<T> 而不是 IList 等。

编辑:请注意,第三行很容易是:

Array array = new object[list.Count];

改为。

【讨论】:

不错的收获!我以为他在 Array 对象上使用了构造函数。 @Jon 不知道数组中元素的类型怎么办?整数只是示例 - 我需要更通用的方法(没有泛型) @MichaelZ:你可以改用object[]【参考方案2】:

您可以使用 Cast 和 ToArray:

Array array = list.Cast<int>().ToArray();

【讨论】:

【参考方案3】:

我很惊讶

 Array array = new Array[list.Count];

甚至可以编译,但它不会做你想做的事。使用

 object[] array = new object[list.Count];

并且,标准备注:如果您可以使用 C#3 或更高版本,请尽可能避免使用 ArrayList。 List&lt;int&gt; 可能会让你更开心

【讨论】:

它可以编译,因为它是一个数组数组。【参考方案4】:

可能最紧凑的解决方案是这样的:

Enumerable.Range(0, list.Count).Select(i =&gt; list[i]).ToArray();

【讨论】:

以上是关于在 C# 中将 IList 转换为数组的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中将对象数组隐式转换为 int 数组

如何在c#中将对象转换为数组? [关闭]

在 C# 中将字符串转换为字节数组

如何在 C# 中将结构转换为字节数组?

在c#中将简单的json转换为字符串数组

在C#中将Char数组转换为字符串[重复]