将“System.Collections.Generic.IEnumerable<T>”转换为“System.Collections.ObjectModel.Collection<T>”

6

我有一个集合,想使用Distinct方法来去除重复项。

public static Collection<MediaInfo> imagePlaylist

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

我遇到了一个错误:“无法将类型 'System.Collections.Generic.IEnumerable' 隐式转换为类型 'System.Collections.ObjectModel.Collection'。已存在显式转换(是否缺少强制转换?)”

imagePlaylist 曾经是一个 List(我可以使用 .ToList()),但为了遵守“CA1002 不要公开泛型列表”的规定,我想将 List 转换为 Collection。

-谢谢


你的集合需要向公共接口公开Add和Remove方法吗?您是否需要通过索引进行随机访问?如果不需要,您可以将imagePlaylist作为只读序列公开为IEnumerable<MediaInfo> - Anthony Pegram
@anthonyPegram 这些方法需要被公开,使用IEnumerable在这种情况下不是一个选项。 - zaza
2个回答

13
您可以做的是,首先将 IEnumerable 转换为泛型列表,然后使用此列表创建一个新的 Collection, 使用 Collection 类的参数化构造函数。
public static Collection<MediaInfo> imagePlaylist

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

1
我为此创建了一个小的扩展方法:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接