Reputation: 912
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
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
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
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