2009-12-17 44 views
6

Tôi có danh sách các Guid củaLàm thế nào để sao chép Danh sách để Mảng

List<Guid> MyList; 

tôi cần phải sao chép nội dung của nó để Mảng

Guid[] 

hãy giới thiệu cho tôi một giải pháp khá

+0

Một câu hỏi khác, MyClass { Giá trị hướng dẫn; } Danh sách Làm thế nào để sao chép thuộc tính Guid vào mảng của Guid? Tôi có nghĩa là không sử dụng câu lệnh lặp –

+1

Tôi không phải là 100% đối với nghi thức SO, nhưng tốt nhất nên đặt câu hỏi mới làm câu hỏi mới. Tôi có thể sai. –

Trả lời

22

Như Luke nói trong nhận xét, loại List<T> cụ thể đã có phương thức ToArray(). Nhưng nếu bạn đang sử dụng C# 3.0, bạn có thể tận dụng các phương pháp ToArray() phần mở rộng trên bất kỳ IEnumerable dụ (trong đó bao gồm IList, IList<T>, bộ sưu tập, các mảng khác, vv)

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 

Về câu hỏi thứ hai của bạn:

Bạn có thể sử dụng phương pháp Select để thực hiện các dự báo cần thiết:

var list = new List<MyClass> {new MyClass(), new MyClass()}; 
Guid[] array = list.Select(mc => mc.value).ToArray(); 
+0

Muchas gracias. –

+5

'Danh sách ' có phương thức 'ToArray' riêng của nó, có sẵn từ .NET2. (Chính xác cú pháp tương tự như trên, mặc dù bạn sẽ không thể sử dụng 'var' hoặc đối tượng khởi tạo mà không có C# 3.) – LukeH

+0

@Luke: Điểm rất tốt! Tôi đã cập nhật câu trả lời của mình cho phù hợp. Cảm ơn. –

10

Bạn chỉ cần phải gọi MyList.ToArray() để có được một mảng của các yếu tố.

3

Sử dụng Enumerable.ToArray() Extension Method bạn có thể làm:

var guidArray = MyList.ToArray(); 

Nếu bạn vẫn đang sử dụng C# 2.0, bạn có thể sử dụng phương pháp List.ToArray. Cú pháp giống nhau (ngoại trừ không có từ khóa var trong C# 2.0).

5

Cách mới (sử dụng phần mở rộng hoặc phương pháp ToArray() trên danh sách chung trong Net 2.0):

Guid[] guidArray = MyList.ToArray(); 

Cách cũ:

Guid[] guidArray = new guidArray[MyList.Length]; 
int idx = 0; 
foreach (var guid in MyList) 
{ 
    guidArray[idx++] = guid; 
} 
+3

C# 2.0 có 'List.ToArray', sử dụng' System.Array.Copy' –

+1

Tôi đoán tôi đang hiển thị tuổi của mình. :-) – tvanfosson

4

Tuy nhiên, một tùy chọn, ngoài việc Guid[] MyArray = MyList.ToArray():

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

Giải pháp này có thể tốt hơn nếu vì lý do nào đó, bạn đã có kích thước mảng và chỉ đơn giản là muốn cư nó (thay vì xây dựng một cái mới, như List<T>.ToArray() hiện).

Các vấn đề liên quan