2008-11-30 38 views
15

Tôi có một đối tượng thuộc loại ICollection<string>. Cách tốt nhất để chuyển đổi thành string[] là gì.ICollection <string> thành chuỗi []

Làm cách nào để thực hiện điều này trong .NET 2?
Làm thế nào điều này có thể được thực hiện sạch hơn trong phiên bản sau của C#, có lẽ sử dụng LINQ trong C# 3?

Trả lời

29

Bạn có thể sử dụng đoạn mã sau để chuyển nó sang một mảng bình thường:

string[] array = new string[collection.Count]; 
collection.CopyTo(array, 0); 

Điều đó sẽ thực hiện công việc :)

+0

tôi có cần khởi tạo mảng có kích thước phù hợp trước không. Tôi không thể làm điều này: string [] futures = new string [] {}; FutureFVDictionary.Keys.CopyTo (tương lai, 0); ; – leora

+1

Mảng đầu tiên phải được khởi tạo đúng kích cỡ - nếu không CopyTo sẽ thất bại với một ArgumentException. – AdrianoKF

+0

với Danh sách (mycoll) .ToArray() bạn không phải lo lắng về kích thước. – gimel

5

Trong (tầm thường) Trường hợp ICollection<String>, sử dụng ToArray:

String[] GetArray(ICollection<String> mycoll) 
{ 
    return mycoll.ToArray<String>(); 
} 

CHỈNH SỬA: với .Net 2.0, bạn có thể trả về mảng có thêm List<String>:

String[] GetArray(ICollection<String> mycoll) 
{ 
    List<String> result = new List<String>(mycoll); 
    return result.ToArray(); 
} 
+0

Trình biên dịch có thể suy ra kiểu đối số, vì vậy mycoll.ToArray() sẽ là tốt, mà không cần phần . –

+0

Danh sách .ToArray phương pháp sử dụng một bản sao mảng, do đó, làm bản sao mảng trực tiếp sẽ là lựa chọn tốt hơn so với việc tạo một danh sách, đó là một đối tượng khác. –

+1

Danh sách (mycoll) .ToArray() tóm tắt các chi tiết tạo và sao chép mảng. – gimel

8

Nếu bạn đang sử dụng C# 3.0 và .Net framework 3.5, bạn sẽ có thể làm:

ICollection<string> col = new List<string>() { "a","b"}; 
string[] colArr = col.ToArray(); 

tất nhiên, bạn phải có "bằng System.Linq;" ở đầu tệp

+0

Ngoài ra Danh sách có một phương pháp ToArray từ .NET 2.0, vì vậy nếu bạn đang sử dụng Danh sách bạn không cần System.Linq –

+4

Ông yêu cầu ICollection CVertex

+1

Đây là câu trả lời hay nhất theo ý kiến ​​của tôi – reggaeguitar

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