zaza
zaza

Reputation: 912

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

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

Upvotes: 6

Views: 17795

Answers (3)

ilmagotida
ilmagotida

Reputation: 11

Nowaday we finally have a cleaner and more readable way to do it with the collection expressions

public record MyItem(int Id, object data);

public class MyClass
{
    public Collection<MyItem> _myCollection;

    static Collection<MyItem> DummyMethodFillingCollection() => new();

    public void MyMethod()
    {
        _myCollection = DummyMethodFillingCollection();

        //here I want to modify the value of _myCollection and reassign it,
        //I can use the collection expression for the purpose
        _myCollection = [.. _myCollection.Distinct()];
    }
}

Upvotes: 1

kiwiaddo
kiwiaddo

Reputation: 85

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();

Upvotes: 2

Maheep
Maheep

Reputation: 5605

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()
                    );

Upvotes: 13

Related Questions