将'System.Collections.Generic.IEnumerable <t>'转换为'System.Collections.ObjectModel.Collection <t>'</t> </t>

时间:2011-12-30 05:15:58

标签: c# linq generics collections implicit-conversion

我有一个Collection,我正在尝试使用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。

-Thanks

2 个答案:

答案 0 :(得分:13)

您可以做的是,首先将IEnumrable转换为通用列表,然后使用此列表使用Collection类的参数化构造函数创建新的Collection

public static Collection<MediaInfo> imagePlaylist

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

答案 1 :(得分: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();