gpt4 book ai didi

c# - 使用 LINQ 时避免代码重复

转载 作者:太空狗 更新时间:2023-10-29 21:03:48 24 4
gpt4 key购买 nike

好吧,我有很多方法,看起来像这样:- 按艺术家、专辑、年份等对列表进行排序。

        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# - 使用 LINQ 时避免代码重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/485567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com