2009-04-13 30 views
7

Tôi có một nhóm thu nhập kế thừa từ List<>. Tôi đã thiết lập một chức năng để sắp xếp danh sách bằng một tài sản nhất định như vậy:Trả lại loại thích hợp sau khi sử dụng OrderBy()

public PlaylistCollection SortByName(IEnumerable<Playlist> playlists) 
{ 
    return (PlaylistCollection)playlists.OrderBy(p => p.Name); 
} 

Khi tôi cố gắng sử dụng các kết quả được sắp xếp trong mã của tôi như thế này:

artistSource.Playlists = (PlaylistCollection)new List<Playlist>(artistSource.Playlists.SortByName(artistSource.Playlists)); 

tôi nhận được lỗi :

Unable to cast object of type 'System.Linq.OrderedEnumerable`2[...Playlist,System.String]' 
to type '...PlaylistCollection'." 

Điều này thật đáng lo ngại khi VS nói với tôi rằng một chuyển đổi rõ ràng tồn tại, vì vậy tôi đã thêm đoạn băng ở trên.

Làm cách nào để truyền từ IEnumerable<> vào bộ sưu tập của tôi?

Trả lời

5

Thật khó để biết câu trả lời đúng là gì mà không cần hiểu thêm về loại PlayListCollection. Nhưng giả sử đó là một lớp sưu tập kiểu tiêu chuẩn, trong đó có một hàm tạo lấy một số An ninh (IE2umer) <T>, thì đoạn mã sau sẽ thực hiện thủ thuật.

Phương pháp mở rộng

public IEnumerable<Playlist> SortByName(IEnumerable<Playlist> playlists) 
{ 
    return playlists.OrderBy(p => p.Name); 
} 

Sử dụng Phương pháp

var temp = artistSource.Playlists.SortByName(artistSource.Playlists); 
artistSource.PlayList = new PlaystListCollection(temp); 

Nếu không, xin vui lòng gửi thêm thông tin về PlayListCollection, đặc biệt là các nhà xây dựng và giao diện được thực hiện, và chúng tôi sẽ có thể giúp bạn ra ngoài với vấn đề của bạn.

EDIT

Nếu mã ở trên không hoạt động, bạn có thể sử dụng phương pháp mở rộng sau để tạo một thể hiện của lớp PlaylistCollection.

public static PlaylistCollection ToPlaylistCollection(this IEnumerable<Playlist> enumerable) { 
    var list = new PlaylistCollection(); 
    foreach (var item in enumerable) { 
    list.Add(item); 
    } 
    return list; 
} 
+0

Trong khi tôi đã cố gắng đề nghị đầu tiên của bạn trước đã, tôi kết hợp nó với đề nghị thứ hai của bạn và nó chỉ làm việc tốt. Tôi đã làm điều đó như ban đầu, tôi chỉ hy vọng cho một giải pháp 'tao nhã' hơn, tôi đoán vậy. Cảm ơn! –

3

Có vẻ như bạn đang tìm kiếm ít hơn về cách truyền kết quả và cách thêm nội dung vào một số List<>. Tôi đang tìm một cách đơn giản để làm điều tương tự và tìm thấy giải pháp sau:

artistSource.PlayList = playlists.OrderBy(p => p.Name).ToList<PlayList>(); 

Phương thức mở rộng ToList có sẵn trong .NET 3.5. Các liên kết sau chứa thêm thông tin:

Enumerable.ToList Method (MSDN)

Sorting a List<FileInfo> by creation date C#

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