2011-12-30 18 views
6

Tengo una colección, estoy intentando utilizar el método Distinct para eliminar duplicados.Conversión de 'System.Collections.Generic.IEnumerable <T>' a 'System.Collections.ObjectModel.Collection <T>'

public static Collection<MediaInfo> imagePlaylist 

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

me sale el error "No se puede convertir implícitamente el tipo 'System.Collections.Generic.IEnumerable' a 'System.Collections.ObjectModel.Collection'. Existe una conversión explícita (¿falta un yeso?)"

imagePlaylist solía ser una lista (podría usar .ToList()), pero para cumplir con "CA1002 No mostrar listas genéricas" Quiero convertir la lista en una colección.

-Gracias

+0

necesita su colección de exponer y quitar al público? ¿Necesita tener acceso aleatorio a través de un índice? De lo contrario, podría simplemente exponer 'imagePlaylist' como' IEnumerable 'para una secuencia de solo lectura. –

+0

@anthonyPegram Esos métodos deben estar expuestos, utilizando IEnumerable no es una opción en este caso – zaza

Respuesta

13

Lo que puede hacer es, primero convertir el IEnumrable a la lista genérica y luego utilizar esta lista para crear un nuevo Collection utilizando el constructor parametrizado de Collection clase.

public static Collection<MediaInfo> imagePlaylist 

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

he creado un método de extensión pequeña para esto:

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

modo que lo pueda hacer la línea de conversión & reutilizar organismo a través de su solución:

imagePlaylist.Distinct(new API.MediaInfoComparer()).ToCollection(); 
Cuestiones relacionadas