2011-12-30 24 views
6

Tôi có một Bộ sưu tập, tôi đang cố gắng sử dụng phương pháp Riêng biệt để loại bỏ các bản sao.Chuyển đổi 'System.Collections.Generic.IEnumerable <T>' thành 'System.Collections.ObjectModel.Collection <T>'

public static Collection<MediaInfo> imagePlaylist 

imagePlaylist = imagePlaylist.Distinct(new API.MediaInfoComparer()); 

tôi nhận được báo lỗi "Can not ngầm chuyển đổi loại 'System.Collections.Generic.IEnumerable' thành 'System.Collections.ObjectModel.Collection'. Một chuyển đổi rõ ràng tồn tại (là bạn thiếu một dàn diễn viên?)"

imagePlaylist từng là Danh sách (tôi có thể sử dụng .ToList()), nhưng để tuân thủ "CA1002 Không hiển thị danh sách chung" Tôi muốn chuyển đổi Danh sách thành Bộ sưu tập.

-Cảm ơn

+0

Liệu nhu cầu sưu tập của bạn để phơi bày Thêm và Xóa với công chúng? Bạn có cần truy cập ngẫu nhiên qua chỉ mục không? Nếu không, bạn có thể đơn giản hiển thị 'imagePlaylist' dưới dạng' IEnumerable 'cho một chuỗi chỉ đọc. –

+0

@anthonyPegram Những phương pháp cần phải được tiếp xúc, sử dụng IEnumerable isnt một tùy chọn trong trường hợp này – zaza

Trả lời

13

Những gì bạn có thể làm là, lần đầu tiên chuyển đổi IEnumrable vào danh sách chung chung và sau đó sử dụng danh sách này để tạo ra một mới Collection sử dụng constructor parametrized của Collection lớp.

public static Collection<MediaInfo> imagePlaylist 

imagePlaylist = new Collection<MediaInfo> 
        (
         imagePlaylist 
         .Distinct(new API.MediaInfoComparer()) 
         .ToList() 
        ); 
1

Tôi tạo ra một phương pháp mở rộng chút cho việc này:

public static class CollectionUtils 
{ 
    public static Collection<T> ToCollection<T>(this IEnumerable<T> data) 
    { 
     return new Collection<T>(data.ToList()); 
    } 
} 

Vì vậy, bạn có thể làm nội tuyến chuyển đổi & tái sử dụng các tiện ích trong suốt giải pháp của bạn:

imagePlaylist.Distinct(new API.MediaInfoComparer()).ToCollection(); 
Các vấn đề liên quan