c# - 使用 OrderBy() 后返回正确的类型

标签 c# linq generics casting

我有一个继承自 List<> 的集合类.我已经设置了一个函数来按特定属性对列表进行排序,如下所示:

public PlaylistCollection SortByName(IEnumerable<Playlist> playlists)
{
    return (PlaylistCollection)playlists.OrderBy(p => p.Name);
}

当我尝试在我的代码中使用排序后的结果时:

artistSource.Playlists = (PlaylistCollection)new List<Playlist>(artistSource.Playlists.SortByName(artistSource.Playlists));

我得到错误:

Unable to cast object of type 'System.Linq.OrderedEnumerable`2[...Playlist,System.String]'
 to type '...PlaylistCollection'."

考虑到 VS 告诉我存在显式转换,这有点令人沮丧,所以我添加了上面的转换。

如何从 IEnumerable<> 正确转换到我的收藏?

最佳答案

如果不深入了解 PlayListCollection 类型,就很难知道正确答案是什么。但假设它是一个标准样式集合类,它有一个采用 IEnumerable 的构造函数,那么下面的代码应该可以解决问题。

扩展方法

public IEnumerable<Playlist> SortByName(IEnumerable<Playlist> playlists)
{
    return playlists.OrderBy(p => p.Name);
}

方法的使用

var temp = artistSource.Playlists.SortByName(artistSource.Playlists);
artistSource.PlayList = new PlaystListCollection(temp);

如果没有,请发布有关 PlayListCollection 的更多信息,特别是构造函数和实现的接口(interface),我们应该能够帮助您解决问题。

编辑

如果上述代码不起作用,您可以使用以下扩展方法创建 PlaylistCollection 类的实例。

public static PlaylistCollection ToPlaylistCollection(this IEnumerable<Playlist> enumerable) {
  var list = new PlaylistCollection();
  foreach ( var item in enumerable ) {
    list.Add(item);
  }
  return list;
}

关于c# - 使用 OrderBy() 后返回正确的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/745571/

相关文章:

c# - 使用 Parallel ForEach 进行本地初始化如何工作?

c# - 使用自定义参数验证助手中断代码分析

javascript - 在 asp.net 中选择单选按钮值时隐藏/显示字段

c# - 如何将动态对象传递给 NUnit TestCase 函数?

C#如何解析XML文件

c++ - C++通用类,为什么需要.cpp文件?

c# - Linq - 等同于左联接内的 BETWEEN

c# - 将 LINQPAD 连接到 Azure 存储

c# - 构建通用集合类

java - java支持泛型方法支持各种参数输入吗?