如何将List复制到Array

时间:2009-12-17 13:11:52

标签: c# arrays list containers

我有Guid的列表

List<Guid> MyList;

我需要将其内容复制到Array

Guid[]

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

5 个答案:

答案 0 :(得分:22)

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

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();

答案 1 :(得分:10)

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

答案 2 :(得分:5)

新方法(在.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;
}

答案 3 :(得分: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()那样构造一个新的那个),那么这个解决方案可能会更好。

答案 4 :(得分:3)

使用Enumerable.ToArray() Extension Method即可:

var guidArray = MyList.ToArray();

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