Eri*_*ith 7 c# linq generics casting
我有一个继承自的集合类List<>.我已经设置了一个函数来按照某个属性对列表进行排序,如下所示:
public PlaylistCollection SortByName(IEnumerable<Playlist> playlists)
{
return (PlaylistCollection)playlists.OrderBy(p => p.Name);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在我的代码中使用排序结果时,如下所示:
artistSource.Playlists = (PlaylistCollection)new List<Playlist>(artistSource.Playlists.SortByName(artistSource.Playlists));
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Unable to cast object of type 'System.Linq.OrderedEnumerable`2[...Playlist,System.String]'
to type '...PlaylistCollection'."
Run Code Online (Sandbox Code Playgroud)
考虑到VS告诉我存在明确的转换,这是令人沮丧的,所以我添加了上面的演员.
我如何正确地投射IEnumerable<>到我的收藏中?
如果不了解PlayListCollection类型的更多信息,很难知道正确答案是什么.但假设它是一个标准的样式集合类,它有一个构造函数采用IEnumerable <T>,那么下面的代码应该可以解决问题.
扩展方法
public IEnumerable<Playlist> SortByName(IEnumerable<Playlist> playlists)
{
return playlists.OrderBy(p => p.Name);
}
Run Code Online (Sandbox Code Playgroud)
使用方法
var temp = artistSource.Playlists.SortByName(artistSource.Playlists);
artistSource.PlayList = new PlaystListCollection(temp);
Run Code Online (Sandbox Code Playgroud)
如果没有,请发布有关PlayListCollection的更多信息,特别是构造函数和实现的接口,我们应该能够帮助您解决问题.
编辑
如果上述代码不起作用,您可以使用以下扩展方法来创建PlaylistCollection类的实例.
public static PlaylistCollection ToPlaylistCollection(this IEnumerable<Playlist> enumerable) {
var list = new PlaylistCollection();
foreach ( var item in enumerable ) {
list.Add(item);
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5872 次 |
| 最近记录: |