如何将List复制到Array

Cap*_*mic 7 c# arrays containers list

我有Guid的名单

List<Guid> MyList;
Run Code Online (Sandbox Code Playgroud)

我需要将其内容复制到Array

Guid[]
Run Code Online (Sandbox Code Playgroud)

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

Rom*_*ier 22

正如卢克在评论中所说,特定List<T>类型已经有了一种ToArray()方法.但是,如果你正在使用C#3.0,你可以利用ToArray()任何扩展方法IEnumerable实例(包括IList,IList<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
Run Code Online (Sandbox Code Playgroud)

关于你的第二个问题:

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

var list = new List<MyClass> {new MyClass(), new MyClass()};
Guid[] array = list.Select(mc => mc.value).ToArray();
Run Code Online (Sandbox Code Playgroud)

  • `List <T>`有它自己的(即不是扩展名)`ToArray`方法,自.NET2起可用.(与上面的语法完全相同,尽管如果没有C#3,您将无法使用`var`或对象初始化器.) (5认同)

Ada*_*itt 10

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


tva*_*son 5

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

Guid[] guidArray = MyList.ToArray();
Run Code Online (Sandbox Code Playgroud)

旧方式:

Guid[] guidArray = new guidArray[MyList.Length];
int idx = 0;
foreach (var guid in MyList)
{
    guidArray[idx++] = guid;
}
Run Code Online (Sandbox Code Playgroud)

  • C#2.0有`List.ToArray`,它使用`System.Array.Copy` (3认同)

Dan*_*Tao 5

除了Guid[] MyArray = MyList.ToArray()

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

如果由于某种原因,您已经有一个适当大小的数组并只是想填充它(而不是像构造一个新数组一样),则此解决方案可能会更好List<T>.ToArray()