如何将列表复制到数组

Posted

技术标签:

【中文标题】如何将列表复制到数组【英文标题】:How to copy List to Array 【发布时间】:2010-12-27 15:51:23 【问题描述】:

我有 Guid 的列表

List<Guid> MyList;

我需要将它的内容复制到数组中

Guid[]

请给我推荐一个漂亮的解决方案

【问题讨论】:

另一个问题,MyClass Guid value; List 如何将 Guid 属性复制到 Guid 的数组?我的意思是不使用迭代语句 我不是 100% 了解 SO 礼仪,但最好将新问题作为新问题提出。我可能是错的。 【参考方案1】:

正如Luke 在 cmets 中所说,特定的List&lt;T&gt; 类型已经有一个ToArray() 方法。但如果您使用的是 C# 3.0,则可以在任何 IEnumerable 实例(包括 IListIList&lt;T&gt;、集合、其他数组等)上利用 ToArray() 扩展方法

var myList = new List<Guid> Guid.NewGuid(), Guid.NewGuid();
Guid[] array = myList.ToArray(); // instance method

IList<Guid> myList2 = new List<Guid> Guid.NewGuid(), Guid.NewGuid();
Guid[] array2 = myList2.ToArray(); // extension method

var myList3 = new Collection<Guid> Guid.NewGuid(), Guid.NewGuid();
Guid[] array3 = myList3.ToArray(); // extension method

关于你的第二个问题:

您可以使用Select 方法来执行所需的投影:

var list = new List<MyClass> new MyClass(), new MyClass();
Guid[] array = list.Select(mc => mc.value).ToArray();

【讨论】:

List&lt;T&gt; 有它自己的(即,不是扩展)ToArray 方法,从 .NET2 开始可用。 (与上面的语法完全相同,尽管如果没有 C#3,您将无法使用 var 或对象初始化器。) @Luke:非常好的观点!我相应地更新了我的答案。谢谢。【参考方案2】:

您应该只需要调用 MyList.ToArray() 来获取元素数组。

【讨论】:

【参考方案3】:

新方法(在 .Net 2.0 中对通用列表使用扩展或 ToArray() 方法):

Guid[] guidArray = MyList.ToArray();

老办法:

Guid[] guidArray = new guidArray[MyList.Length];
int idx = 0;
foreach (var guid in MyList)

    guidArray[idx++] = guid;

【讨论】:

C# 2.0 有List.ToArray,它使用System.Array.Copy【参考方案4】:

除了Guid[] MyArray = MyList.ToArray()之外还有另一个选择:

Guid[] MyArray = new Guid[MyList.Count]; // or wherever you get your array from
MyList.CopyTo(MyArray, 0);

如果出于某种原因,您已经有一个大小合适的数组并且只是想填充它(而不是像 List&lt;T&gt;.ToArray() 那样构造一个新数组),那么这个解决方案可能会更好。

【讨论】:

【参考方案5】:

使用Enumerable.ToArray() Extension Method 你可以做到:

var guidArray = MyList.ToArray();

如果您仍在使用 C# 2.0,则可以使用 List.ToArray 方法。语法相同(除了 C# 2.0 中没有 var 关键字)。

【讨论】:

以上是关于如何将列表复制到数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将列表中的元素复制到数组 c/c++

如何将一个元素数组作为单列/列表返回? [复制]

VB.NET 如何将ListBox列表框的所有项复制到一个数组中,便于排序?谢谢解答

如何将可重复使用的多行/多列表从一个 Excel 工作表复制到另一个工作表上的数据库

如何从 Firestore 集合中获取所有文档并将它们返回到数组列表中? [复制]

VBA 如何批量将单元格复制到另一个工作表中