2009-04-13 5 views
7

List<>에서 상속하는 컬렉션 클래스가 있습니다. 그래서 같은 특정 속성으로 목록을 정렬하는 기능을 설정 한 :OrderBy()를 사용한 후 적절한 유형 반환

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

을 다음과 같은 에러가 발생합니다

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

내가 이렇게 내 코드에서 정렬 된 결과를 사용하려고

:

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

VS가 명시적인 변환이 존재한다고 말한 것을 생각하면 적당히 실망 스럽기 때문에 위의 캐스트를 추가했습니다.

IEnumerable<>에서 내 컬렉션으로 올바르게 캐스팅하려면 어떻게해야하나요?

답변

5

PlayListCollection 유형에 대해 더 알지 못해서 옳은 대답이 무엇인지 알기가 어렵습니다. 그러나 IEnumerable <T>을 취하는 생성자를 가진 표준 스타일 컬렉션 클래스라고 가정하면 다음 코드가 그 트릭을 수행해야합니다. 방법

확장 메서드

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#