2011-12-30 16 views
6

Ho una raccolta, sto cercando di utilizzare il metodo Distinct per rimuovere i duplicati.Conversione di 'System.Collections.Generic.IEnumerable <T>' a 'System.Collections.ObjectModel.Collection <T>'

public static Collection<MediaInfo> imagePlaylist 

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

ottengo l'errore "Impossibile convertire implicitamente il tipo 'System.Collections.Generic.IEnumerable' a 'System.Collections.ObjectModel.Collection'. Esiste una conversione esplicita (che le manca un cast?)"

imagePlaylist era un elenco (potevo usare .ToList()), ma per rispettare "CA1002 Non esporre elenchi generici" Voglio convertire l'elenco in una raccolta.

-Grazie

+0

La vostra collezione necessità di esporre Aggiungi e rimuovi al pubblico? Devi avere accesso casuale tramite un indice? In caso contrario, potresti semplicemente esporre 'imagePlaylist' come' IEnumerable 'per una sequenza readonly. –

+0

@anthonyPegram Questi metodi devono essere esposti, utilizzando IEnumerable non è un'opzione in questo caso – zaza

risposta

13

Che cosa si può fare è, prima convertire il IEnumrable alla lista generico e quindi utilizzare questo elenco per creare un nuovo Collection utilizzando il costruttore parametrizzata di Collection di classe.

public static Collection<MediaInfo> imagePlaylist 

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

ho creato un metodo di estensione poco per questo:

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

modo da poter poi fare la linea di conversione & riutilizzare l'utilità per tutta la vostra soluzione:

imagePlaylist.Distinct(new API.MediaInfoComparer()).ToCollection(); 
Problemi correlati