Converting 'System.Collections.Generic.IEnumerable<T>' to 'System.Collections.ObjectModel.Collection<T>'

17,120

Solution 1

What you can do is, first convert the IEnumrable to generic list and then use this list to create a new Collection using the parametrized constructor of Collection class.

public static Collection<MediaInfo> imagePlaylist

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

Solution 2

I created a little extension method for this:

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

So you can then do the conversion inline & reuse the utility throughout your solution:

imagePlaylist.Distinct(new API.MediaInfoComparer()).ToCollection();
Share:
17,120
zaza
Author by

zaza

Updated on June 27, 2022

Comments

  • zaza
    zaza almost 2 years

    I have a Collection, I'm trying to use the Distinct method to remove duplicates.

    public static Collection<MediaInfo> imagePlaylist
    
    imagePlaylist = imagePlaylist.Distinct(new API.MediaInfoComparer());
    

    I get the error "Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'System.Collections.ObjectModel.Collection'. An explicit conversion exists (are you missing a cast?)"

    imagePlaylist used to be a List (i could use .ToList()), but to comply with "CA1002 Do not expose generic lists" I want to convert the List to a Collection.

    -Thanks