2011-12-30 17 views
6

私はコレクションを持っています、私は重複を削除するためにDistinctメソッドを使用しようとしています。私は'System.Collections.Generic.IEnumerable <T>'を 'System.Collections.ObjectModel.Collection <T>'に変換します。

「明示的な変換が存在する。暗黙のうちに 『System.Collections.ObjectModel.Collection』にタイプ 『System.Collections.Generic.IEnumerable』を変換できません(あなたはキャストが欠けている?)」というエラーが得る

public static Collection<MediaInfo> imagePlaylist 

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

imagePlaylistはList(私は.ToList()を使用することができましたが、 "CA1002 generic listを公開しないでください"に準拠しています)ListをCollectionに変換したい。

あなたは何ができるか-Thanks

+0

はあなたのコレクションは、必要もありません追加と削除を公開しますか?インデックスを使ってランダムアクセスする必要がありますか?もしそうでなければ、単に 'imagePlaylist'を' IEnumerable 'として読み込みシーケンスに公開することができます。 –

+0

@anthonyPegramこれらのメソッドを公開する必要があります。この場合、IEnumerableはオプションではありません – zaza

答えて

13

は最初IEnumrableは、一般的なリストに変換し、Collectionクラスのパラメータ化コンストラクタを使用して新しいCollectionを作成するには、このリストを使用しています。

public static Collection<MediaInfo> imagePlaylist 

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

私はこのために少し拡張メソッドを作成しました:

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

ですから、その後の変換インライン&は、ソリューション全体のユーティリティを再利用しないことができます。

imagePlaylist.Distinct(new API.MediaInfoComparer()).ToCollection(); 
関連する問題