2009-12-10 18 views
9

Vì lý do nào đó, sếp của tôi thích tạo các loại tùy chỉnh để đại diện cho một danh sách chung (ngay cả trong hầu hết các trường hợp loại tùy chỉnh của anh ấy không có thành viên nào! Tôi nghĩ anh ấy chỉ lười biếng và không thích nhập Danh sách hoặc thứ gì đó nhưng với tôi điều này đã trở nên xấu hổ và gây ra cho tôi nhiều nhức đầu cho mỗi vấn đề dưới đây:Không thể truyền đối tượng thuộc loại 'System.Collections.Generic.List`1 [Item]' để nhập 'ItemList'

Điểm trong trường hợp:

Do đó, khi tôi đang sử dụng một Danh sách tiêu chuẩn elow, tôi luôn gặp vấn đề về đúc ngay cả khi loại tùy chỉnh được kế thừa từ Danh sách

private ItemList someMethod(ItemList itemList) 
{ 
    ... 
    itemList = (ItemList)items.Where(x => x.ItemType != ItemType.Car && x.ItemType != ItemType.Truck).ToList(); 

    return itemList; 
    .... 
} 
+0

Câu hỏi chính xác ở đây là gì? –

+0

Lỗi tôi nhận được ... nằm trong tiêu đề bài đăng – PositiveGuy

+1

Ví dụ trong trường hợp này cần thiết trong Winforms để gắn kết. Nếu bạn muốn sử dụng các nhà thiết kế, bạn phải có một lớp học cụ thể. Điều này đặc biệt hữu ích khi sử dụng các điều khiển của bên thứ ba như Infragustics. – fuzzbone

Trả lời

6

Như Grzenio points out, bạn không thể sử dụng ToList() và dàn diễn viên, tuy nhiên bạn có thể tạo ra phương pháp mở rộng của riêng bạn để tạo ra một thể hiện của các loại có nguồn gốc từ một chuỗi:

public static TDerived CreateFromEnumerable<TDerived, T>(this IEnumerable<T> seq) where TDerived : List<T>, new() 
     { 
      TDerived outList = new TDerived(); 
      outList.AddRange(seq); 
      return outList; 
     } 

Vì vậy, ví dụ của bạn, bạn sẽ làm:

ItemList outList = itemList 
    .Where(x => x.ItemType != ItemType.Car && x.ItemType != ItemType.Truck) 
    .CreateFromEnumerable<ItemList, Item>(); 
+1

Tôi đã đưa ra câu trả lời này vì nó nằm trên đầu của tôi và vì vậy đây là một ví dụ tốt để giải thích giải pháp "suy luận". Tôi không phải là một guru tại các phương pháp chung chung được nêu ra. – PositiveGuy

+0

Điều này cũng phù hợp với tôi ... cảm ơn. –

2

Thật không may ToList() sẽ trả về danh sách bình thường chứ không phải ItemnList. Tôi không thực sự nhìn thấy một cách giải quyết hợp lý, nó có lẽ sẽ tốt hơn để đóng gói Danh sách trong ItemnList, thay vì bắt nguồn từ nó.

+1

ý của bạn là gì khi đóng gói danh sách trong ItemList? – PositiveGuy

+1

bạn có ý nghĩa gì với "danh sách bình thường" ... một IEnumerable? – PositiveGuy

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