2010-02-05 34 views
42

Tôi đang cố gắng loại IList loại thành List loại nhưng tôi gặp lỗi mỗi lần.Truyền IList vào Danh sách

List<SubProduct> subProducts= Model.subproduct; 

Model.subproduct trả về IList<SubProduct>.

+9

tốt nhất là lập trình chống lại giao diện (IList) thay vì implimentation (List). Đó là một diễn viên không cần thiết để chuyển tới Danh sách. Bây giờ bạn phải thêm xử lý lỗi nếu trên cơ hội tắt một thực hiện IList, mà không phải là một danh sách, nhập đường dẫn mã đó. –

+3

Vâng, nhưng 'IList' không có thứ mà' List' có, ví dụ 'AddRange' –

Trả lời

87

Hãy thử

List<SubProduct> subProducts = new List<SubProduct>(Model.subproduct); 

hoặc

List<SubProduct> subProducts = Model.subproducts as List<SubProduct>; 
+5

Đây là câu trả lời đúng, nhưng có lý do nào bạn muốn xử lý Danh sách thay vì IList không? Hầu hết thời gian sử dụng IList là một lựa chọn tốt hơn. –

+3

IList subProducts = Model.subproduct; –

+3

@KeithRousseau Tôi gặp sự cố khi cần sử dụng phương thức AddRange(). – ScubaSteve

3
List<SubProduct> subProducts= (List<SubProduct>)Model.subproduct; 

Các failes chuyển đổi ngầm vì List<> cụ IList, không ngược lại. Vì vậy, bạn có thể nói IList<T> foo = new List<T>(), nhưng không được List<T> foo = (some IList-returning method or property).

+7

Chỉ một nitpick nhỏ: Danh sách không lấy được từ IList, Nó * thực hiện * IList. Từ bắt nguồn ngụ ý rằng có một mối quan hệ thừa kế giữa hai. –

+0

Rất tiếc, đúng vậy. – Webleeuw

27

Làm thế nào về điều này:

List<SubProduct> subProducts = Model.subproduct.ToList(); 
+4

Điều đó chỉ có sẵn nếu bạn có quyền truy cập vào các phần mở rộng được định nghĩa trong phần 'System.Linq'. – Suncat2000

+1

Đây phải là câu trả lời được chấp nhận. –

7

Trong trường hợp của tôi, tôi đã phải làm điều này, bởi vì không ai trong số những giải pháp đề nghị đã có sẵn:

List<SubProduct> subProducts = Model.subproduct.Cast<SubProduct>().ToList(); 
0
List<ProjectResources> list = new List<ProjectResources>();   
IList<ProjectResources> obj = `Your Data Will Be Here`; 
list = obj.ToList<ProjectResources>(); 

Điều này sẽ chuyển đổi đối tượng IList thành đối tượng danh sách.

-1

Đây là tùy chọn tốt nhất để truyền/chuyển đổi danh sách đối tượng chung thành danh sách chuỗi.

object valueList; 
List<string> list = ((IList)valueList).Cast<object>().Select(o => o.ToString()).ToList(); 
+0

valueList phải là danh sách đối tượng –

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