在 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 而不是 ArrayList
、IList<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<int>
可能会让你更开心
【讨论】:
它可以编译,因为它是一个数组数组。【参考方案4】:可能最紧凑的解决方案是这样的:
Enumerable.Range(0, list.Count).Select(i => list[i]).ToArray();
【讨论】:
以上是关于在 C# 中将 IList 转换为数组的主要内容,如果未能解决你的问题,请参考以下文章