2009-12-17 44 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()一樣)。