从 List<T> 到数组 T[] 的转换

Posted

技术标签:

【中文标题】从 List<T> 到数组 T[] 的转换【英文标题】:Conversion from List<T> to array T[] 【发布时间】:2009-03-10 07:13:48 【问题描述】:

有没有一种将强类型的List&lt;T&gt; 转换为相同类型的数组的捷径,例如:List&lt;MyClass&gt;MyClass[]

我的意思是一个方法调用,或者至少短于:

MyClass[] myArray = new MyClass[list.Count];
int i = 0;
foreach (MyClass myClass in list)

    myArray[i++] = myClass;

【问题讨论】:

【参考方案1】:

尝试使用

MyClass[] myArray = list.ToArray();

【讨论】:

这是一个浅拷贝,对吗?从docs不清楚...【参考方案2】:
List<int> list = new List<int>();
int[] intList = list.ToArray();

这是你的解决方案吗?

【讨论】:

【参考方案3】:

List&lt;T&gt; 上使用ToArray()

【讨论】:

【参考方案4】:
list.ToArray()

会做的。详情请见here。

【讨论】:

【参考方案5】:

你可以简单地使用ToArray()扩展方法

例子:

Person p1 = new Person()  Name = "Person 1", Age = 27 ;
Person p2 = new Person()  Name = "Person 2", Age = 31 ;

List<Person> people = new List<Person>  p1, p2 ;

var array = people.ToArray();

According to Docs

使用Array.Copy()复制元素,这是一个O(n)操作, 其中 n 是计数。

【讨论】:

【参考方案6】:

一种可能的避免解决方案,它使用多个 CPU 内核并预计运行速度会更快,但它的执行速度却慢了大约 5 倍:

list.AsParallel().ToArray();

【讨论】:

【参考方案7】:

使用 HPCsharp nuget 包提供的多个处理器内核将速度提高一倍:

list.ToArrayPar();

【讨论】:

以上是关于从 List<T> 到数组 T[] 的转换的主要内容,如果未能解决你的问题,请参考以下文章

WCF 服务参考作为数组与 List<T>

为啥 List<T> 的“索引超出范围”异常,但数组却没有?

数组 列表 拆分

如何从 WebFlux 中的 Mono<List<T>> 中提取内容以将其传递到调用链中

为啥 C# 数组对 Enumeration 使用引用类型,而 List<T> 使用可变结构?

java中怎么取两个数组中不相同的数据?