c# – 使用LINQ时避免代码重复
发布时间:2020-12-15 17:47:44 所属栏目:百科 来源:网络整理
导读:好的,我有很多方法,如下所示: – 按艺术家,专辑,年份等对列表进行排序. public void SortByAlbum(SortOrder sortOrder) { if (sortOrder == SortOrder.Ascending) _list = _list.OrderBy(x = x.Album).ToList(); else if (sortOrder == SortOrder.Descendin
好的,我有很多方法,如下所示: – 按艺术家,专辑,年份等对列表进行排序.
public void SortByAlbum(SortOrder sortOrder) { if (sortOrder == SortOrder.Ascending) _list = _list.OrderBy(x => x.Album).ToList(); else if (sortOrder == SortOrder.Descending) _list = _list.OrderByDescending(x => x.Album).ToList(); } 还有这个: public void SortByArtist(SortOrder sortOrder) { if (sortOrder == SortOrder.Ascending) _list = _list.OrderBy(x => x.Artist).ToList(); else if (sortOrder == SortOrder.Descending) _list = _list.OrderByDescending(x => x.Artist).ToList(); } 现在显然这不是好代码所以它需要重构为一个Sort()方法,但我不知道如何以最简单的方式做到这一点.我不在乎它是否使用IComparer或LINQ. 我希望它看起来像这样: public void Sort(SortOrder sortOrder,SortType sortType) { //implementation here } public enum SortType { Artist,Album,Year } 那么最简洁的方法是什么,没有代码重复? 谢谢,李 解决方法
您应该能够模仿OrderBy扩展方法的签名:
更新1您必须在keySelector Func的第一个通用参数中显式.我打算猜你的类型并称之为“歌曲”. public void Sort<TKey>(SortOrder sortOrder,Func<Song,TKey> keySelector) { if (sortOrder == SortOrder.Descending) { _list = _list.OrderByDescending(keySelector).ToList(); } else { _list = _list.OrderBy(keySelector).ToList(); } } 现在您可以像这样调用“排序”: Sort(SortOrder.Descending,x => x.Album); 更新2 跟进Tom Lokhorst的评论:如果你想预定义一些速记排序标准,你可以通过定义这样一个类来实现: public static class SortColumn { public static readonly Func<Song,string> Artist = x => x.Artist; public static readonly Func<Song,string> Album = x => x.Album; } 现在你可以简单地打电话: Sort(SortOrder.Descending,SortColumn.Artist); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c# – 连续打字时不要提高TextChanged
- react-native结合react-navigation之TabNavigator
- 关于数据序列化(4),FastJson的两个bug
- ruby-on-rails – 如何在Rails中使用postgresql函数
- Oracle控制文件、数据文件、临时文件
- 漫谈兼容内核:ReactOS怎样实现系统调用http://www.linuxsir
- WebForm.aspx 页面通过 AJAX 访问WebForm.aspx.cs类中的方法
- 面象对象设计6大原则之三:里氏替换原则
- ruby-on-rails-3 – Rails 3.1内置记录器与Log4r
- C语言二分查找算法,折半查找算法