如何将列表复制到数组
Posted
技术标签:
【中文标题】如何将列表复制到数组【英文标题】:How to copy List to Array 【发布时间】:2010-12-27 15:51:23 【问题描述】:我有 Guid 的列表
List<Guid> MyList;
我需要将它的内容复制到数组中
Guid[]
请给我推荐一个漂亮的解决方案
【问题讨论】:
另一个问题,MyClass Guid value; List正如Luke 在 cmets 中所说,特定的List<T>
类型已经有一个ToArray()
方法。但如果您使用的是 C# 3.0,则可以在任何 IEnumerable
实例(包括 IList
、IList<T>
、集合、其他数组等)上利用 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<T>
有它自己的(即,不是扩展)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<T>.ToArray()
那样构造一个新数组),那么这个解决方案可能会更好。
【讨论】:
【参考方案5】:使用Enumerable.ToArray() Extension Method 你可以做到:
var guidArray = MyList.ToArray();
如果您仍在使用 C# 2.0,则可以使用 List.ToArray 方法。语法相同(除了 C# 2.0 中没有 var
关键字)。
【讨论】:
以上是关于如何将列表复制到数组的主要内容,如果未能解决你的问题,请参考以下文章
VB.NET 如何将ListBox列表框的所有项复制到一个数组中,便于排序?谢谢解答
如何将可重复使用的多行/多列表从一个 Excel 工作表复制到另一个工作表上的数据库