我有一个集合,我正在尝试使用 Distinct 方法来删除重复项。
public static Collection<MediaInfo> imagePlaylist
imagePlaylist = imagePlaylist.Distinct(new API.MediaInfoComparer());
我收到错误“无法将类型‘System.Collections.Generic.IEnumerable’隐式转换为‘System.Collections.ObjectModel.Collection’。存在显式转换(是否缺少强制转换?)”
imagePlaylist 曾经是一个列表(我可以使用 .ToList()),但为了遵守“CA1002 不要公开通用列表”,我想将列表转换为集合。
-谢谢
您可以做的是,首先将
IEnumrable
转换为通用列表,然后使用此列表使用 Collection
类的参数化构造函数创建新的 Collection
。
public static Collection<MediaInfo> imagePlaylist
imagePlaylist = new Collection<MediaInfo>
(
imagePlaylist
.Distinct(new API.MediaInfoComparer())
.ToList()
);
我为此创建了一个小扩展方法:
public static class CollectionUtils
{
public static Collection<T> ToCollection<T>(this IEnumerable<T> data)
{
return new Collection<T>(data.ToList());
}
}
因此,您可以进行内联转换并在整个解决方案中重复使用该实用程序:
imagePlaylist.Distinct(new API.MediaInfoComparer()).ToCollection();
现在我们终于有了一种更清晰、更易读的方式来使用 集合表达式
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()];
}
}