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

问题描述 投票:0回答:3

我有一个集合,我正在尝试使用 Distinct 方法来删除重复项。

public static Collection<MediaInfo> imagePlaylist

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

我收到错误“无法将类型‘System.Collections.Generic.IEnumerable’隐式转换为‘System.Collections.ObjectModel.Collection’。存在显式转换(是否缺少强制转换?)”

imagePlaylist 曾经是一个列表(我可以使用 .ToList()),但为了遵守“CA1002 不要公开通用列表”,我想将列表转换为集合。

-谢谢

c# linq generics collections implicit-conversion
3个回答
13
投票

您可以做的是,首先将

IEnumrable
转换为通用列表,然后使用此列表使用
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();

0
投票

现在我们终于有了一种更清晰、更易读的方式来使用 集合表达式

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()];
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.