2009-04-13 12 views
7

का उपयोग करने के बाद उचित प्रकार लौट रहा है मेरे पास एक संग्रह वर्ग है जो List<> से प्राप्त होता है। मैं बहुत की तरह एक निश्चित संपत्ति द्वारा क्रमित करने के लिए एक समारोह का गठन किया गया है:ऑर्डरबी()

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

जब मैं इस तरह मेरे कोड में क्रमबद्ध परिणामों का उपयोग करने का प्रयास करें:

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

मैं त्रुटि मिलती है :

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

यह सामान्य रूप से निराशाजनक है क्योंकि वीएस ने मुझे बताया कि एक स्पष्ट रूपांतरण मौजूद है, इसलिए मैंने उपरोक्त कलाकार जोड़ा।

मैं अपने संग्रह में IEnumerable<> से ठीक से कैसे डाला?

उत्तर

5

यह जानना मुश्किल है कि सही उत्तर किस प्रकार PlayListCollection के बारे में अधिक समझने के बिना है। लेकिन यह मानते हुए कि यह एक मानक शैली संग्रह वर्ग है जिसमें एक निर्माता है जो एक आईनेमेरेबल < टी > लेता है, तो निम्न कोड को चाल चलनी चाहिए।

एक्सटेंशन विधि

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

विधि

उपयोग की
var temp = artistSource.Playlists.SortByName(artistSource.Playlists); 
artistSource.PlayList = new PlaystListCollection(temp); 

यदि नहीं, तो PlayListCollection बारे में अधिक जानकारी, विशेष रूप से निर्माता और कार्यान्वित इंटरफेस पोस्ट करें, और हम आपकी सहायता करने में सक्षम होना चाहिए आपकी समस्या के साथ।

संपादित

ऊपर कोड काम नहीं करता है आप PlaylistCollection वर्ग का एक उदाहरण बनाने के लिए निम्नलिखित विस्तार विधि का उपयोग कर सकते हैं।

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

मैंने पहले पहले से ही अपने पहला सुझाव की कोशिश की थी, वहीं मैं इसे अपने दूसरे सुझाव के साथ संयुक्त और यह सिर्फ ठीक काम किया: निम्न लिंक अतिरिक्त जानकारी होती है। मैंने इसे शुरू में ऐसा ही किया होगा, मुझे लगता है कि मैं बस एक और 'सुरुचिपूर्ण' समाधान की उम्मीद कर रहा था, मुझे लगता है। धन्यवाद! –

3

यह आप कैसे परिणाम कास्ट करने के लिए के लिए कम यह सामान के लिए कैसे एक List<> में देख रहे हैं लगता है। मैं एक ही बात करने के लिए एक आसान तरीका के लिए देख रहा है और निम्न समाधान पाया गया था:

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

ToList विस्तार विधि .NET 3.5 में उपलब्ध है।

Enumerable.ToList Method (MSDN)

Sorting a List<FileInfo> by creation date C#

संबंधित मुद्दे