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

C# 使用OrderBy()后返回正确的类型,c#,linq,generics,casting,C#,Linq,Generics,Casting,我有一个从列表继承的集合类。我已经设置了一个函数来按特定属性对列表进行排序,如下所示: public PlaylistCollection SortByName(IEnumerable<Playlist> playlists) { return (PlaylistCollection)playlists.OrderBy(p => p.Name); } 考虑到VS告诉我存在显式转换,这有点令人沮丧,所以我添加了上面的cast 如何正确地从IEnumerable转换到我的

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

public PlaylistCollection SortByName(IEnumerable<Playlist> playlists)
{
    return (PlaylistCollection)playlists.OrderBy(p => p.Name);
}
考虑到VS告诉我存在显式转换,这有点令人沮丧,所以我添加了上面的cast


如何正确地从
IEnumerable
转换到我的集合?

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

扩展方法

public IEnumerable<Playlist> SortByName(IEnumerable<Playlist> playlists)
{
    return playlists.OrderBy(p => p.Name);
}
如果没有,请发布更多关于PlayCollection的信息,特别是构造函数和实现的接口,我们应该能够帮助您解决问题

编辑

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

public static PlaylistCollection ToPlaylistCollection(this IEnumerable<Playlist> enumerable) {
  var list = new PlaylistCollection();
  foreach ( var item in enumerable ) {
    list.Add(item);
  }
  return list;
}
公共静态播放列表集合ToPlaylistCollection(此IEnumerable可枚举){
var list=新的播放列表集合();
foreach(可枚举中的变量项){
列表。添加(项目);
}
退货清单;
}

似乎您关注的不是如何强制转换结果,而是如何将结果填充到
列表中。我正在寻找一种简单的方法来做同样的事情,并找到了以下解决方案:

artistSource.PlayList = playlists.OrderBy(p => p.Name).ToList<PlayList>();
artistSource.PlayList=playlists.OrderBy(p=>p.Name.ToList();
ToList
扩展方法在.NET3.5中提供。以下链接包含其他信息:


虽然我之前已经尝试过你的第一个建议,但我将它与你的第二个建议结合起来,效果很好。起初我会这样做,我只是希望有一个更“优雅”的解决方案,我想。谢谢
var temp = artistSource.Playlists.SortByName(artistSource.Playlists);
artistSource.PlayList = new PlaystListCollection(temp);
public static PlaylistCollection ToPlaylistCollection(this IEnumerable<Playlist> enumerable) {
  var list = new PlaylistCollection();
  foreach ( var item in enumerable ) {
    list.Add(item);
  }
  return list;
}
artistSource.PlayList = playlists.OrderBy(p => p.Name).ToList<PlayList>();