2009-04-13 17 views
7

Kullandıktan sonra uygun türde döndürme List<>'dan devraldığım bir koleksiyon sınıfım var. Öyle gibi belirli bir özelliği göre sıralamak için bir işlev kurdum:OrderBy()

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

hata alıyorum:

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

Bu gibi benim kodunda sıralı sonuçları kullanmayı deneyin

:

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

Bu VS açık bir dönüşüm var olduğunu söyledi dikkate orta sinir bozucu olduğunu, bu yüzden yukarıdaki döküm ekledi.

Koleksiyonumda IEnumerable<>'dan nasıl düzgün şekilde yayın yapabilirim?

cevap

5

Doğru cevabın PlayListCollection türü hakkında daha fazla bilgi sahibi olmadan ne olduğunu bilmek zor. Ama bir IEnumerable <T> alarak bir kurucuya sahip bir standart stil toplama sınıfı varsayarak, aşağıdaki kod hile yapmalıdır. Yöntem

ait

Uzatma Yöntemi

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

Kullanım

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

Değilse, daha PlayListCollection hakkında bilgi, özellikle yapıcı ve uygulanan arayüzleri sonrası ve dışarı size yardımcı olmalıdır lütfen senin probleminle.

Yukarıdaki kod PlaylistCollection sınıfının bir örneğini oluşturmak için aşağıdaki uzatma yöntemi kullanabilirsiniz çalışmıyorsa

DÜZENLEME.

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

, senin ikinci öneri ile kombine ve gayet güzel çalıştı: Aşağıdaki bağlantılar ek bilgileri içerir. Bunu daha önce yaptığım gibi yapardım, sanırım daha 'zarif' bir çözüm bekliyordum sanırım. Teşekkürler! –

3

bir List<> içine şeyler nasıl daha az sonuç ve daha döküm nasıl aradığınız gibi görünüyor. Ben aynı şeyi yapmak için basit bir yol arıyor ve aşağıdaki çözümü bulunmuştur:

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

ToList uzatma yöntemi .NET 3.5 mevcuttur. Ben zaten daha önce ilk öneri çalıştı iken

Enumerable.ToList Method (MSDN)

Sorting a List<FileInfo> by creation date C#

İlgili konular