【问题标题】:Converting 'System.Collections.Generic.IEnumerable<T>' to 'System.Collections.ObjectModel.Collection<T>'将“System.Collections.Generic.IEnumerable<T>”转换为“System.Collections.ObjectModel.Collection<T>”
【发布时间】:2012-01-30 08:59:16
【问题描述】:

我有一个集合,我正在尝试使用 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&lt;MediaInfo&gt; 以获得只读序列。
  • @anthonyPegram 这些方法需要公开,在这种情况下使用 IEnumerable 不是一个选项

标签: c# linq generics collections implicit-conversion


【解决方案1】:

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

public static Collection<MediaInfo> imagePlaylist

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多