2011-10-01 44 views

Trả lời

298

Bạn có thể thực hiện điều này rất đơn giản bằng cách sử dụng LINQ.

Hãy chắc chắn này sử dụng là ở phía trên cùng của tập tin # C:

using System.Linq; 

Sau đó, sử dụng phương pháp ToList phần mở rộng.

Ví dụ:

IEnumerable<int> enumerable = Enumerable.Range(1, 300); 
List<int> asList = enumerable.ToList(); 
+34

Điều quan trọng cần lưu ý là giải pháp của bạn hoạt động đối với phiên bản chung của 'IEnumerable'. Câu trả lời từ dưa chua của người dùng bên dưới xử lý phiên bản không chung chung. – mkmurray

+8

Cảm ơn bạn đã "sử dụng System.Linq;" – mili

+2

Cảm ơn bạn @mkmurray Tôi cần chú ý kỹ để tìm "dưa chua": D – fabriciorissetto

123

Trong trường hợp bạn đang làm việc với một thường xuyên cũ System.Collections.IEnumerable thay vì IEnumerable<T> bạn có thể sử dụng enumerable.Cast<object>().ToList()

4

tôi sử dụng một phương pháp mở rộng cho việc này. Phương pháp mở rộng đầu tiên của tôi kiểm tra để xem nếu điều tra là null và nếu như vậy tạo ra một danh sách sản phẩm nào. Điều này cho phép bạn làm một foreach trên nó mà không rõ ràng phải kiểm tra null.

Dưới đây là một ví dụ rất giả tạo:

IEnumerable<string> stringEnumerable = null; 
StringBuilder csv = new StringBuilder(); 
stringEnumerable.ToNonNullList().ForEach(str=> csv.Append(str).Append(",")); 

Dưới đây là phương pháp mở rộng:

public static List<T> ToNonNullList<T>(this IEnumerable<T> obj) 
{ 
    return obj == null ? new List<T>() : obj.ToList(); 
} 
4

một cách khác

List<int> list=new List<int>(); 

IEnumerable<int> enumerable =Enumerable.Range(1, 300); 

foreach (var item in enumerable) 
{  
    list.add(item); 
} 
+0

Bạn nên sử dụng hàm "AddRange (enumerable)" hoặc hàm tạo List (enumerable). – QtRoS

14

Nếu bạn đang sử dụng một thực hiện System.Collections.IEnumerable bạn có thể làm như sau để chuyển đổi nó thành một số List. Mục đích sau đây sử dụng phương pháp Enumerable.Cast để chuyển đổi IEnumberable thành Generic List.

//ArrayList Implements IEnumerable interface 
ArrayList _provinces = new System.Collections.ArrayList(); 
_provinces.Add("Western"); 
_provinces.Add("Eastern"); 

List<string> provinces = _provinces.Cast<string>().ToList(); 

Nếu bạn đang sử dụng phiên bản Generic IEnumerable<T>, Việc chuyển đổi là thẳng về phía trước. Kể từ khi cả hai đều là thuốc generic, bạn có thể làm như dưới đây,

IEnumerable<int> values = Enumerable.Range(1, 10); 
List<int> valueList = values.ToList(); 

Nhưng nếu IEnumerable là null, khi bạn cố gắng để chuyển đổi nó vào một List, bạn sẽ nhận được ArgumentNullException nói Giá trị không thể null.

IEnumerable<int> values2 = null; 
List<int> valueList2 = values2.ToList(); 

enter image description here

Do đó như đã đề cập trong other answer, hãy nhớ làm một tấm séc null trước khi chuyển đổi nó vào một List.

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