2009-12-17 40 views
6

我的列表的GUID如何目录复制到阵列

List<Guid> MyList; 

我需要将其内容复制到阵列

Guid[] 

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

+0

另一个问题, MyClass { Guid value; } 列表 如何将Guid属性复制到Guid的数组? 我的意思是不使用迭代语句 – 2009-12-17 13:34:40

+1

我不是100%的SO礼仪,但最好能提出一个新问题作为一个新问题。我可能是错的。 – 2009-12-17 16:19:38

回答

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

Muchas gracias。 – 2009-12-17 13:15:14

+5

'List '它有自己的(即不是扩展)'ToArray'方法,从.NET2开始可用。 (与上面的语法完全相同,但是如果没有C#3,您将无法使用'var'或对象初始器。) – LukeH 2009-12-17 13:32:33

+0

@Luke:非常好的一点!我相应地更新了我的答案。谢谢。 – 2009-12-17 16:17:16

10

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

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

C#2.0有'List.ToArray',它使用'System.Array.Copy' – 2009-12-17 13:20:54

+1

我想我正在展示我的年龄。 :-) – tvanfosson 2009-12-17 14:30:15

4

还有一种选择,除了Guid[] MyArray = MyList.ToArray()

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

这种解决方案可能是,如果更好,不管什么原因,你已经有了一个properly-只是想填充它(而不是构建一个新的,如List<T>.ToArray()一样)。