';然后按';使用不同数量的标准

本文关键字:标准 然后 | 更新日期: 2023-09-27 18:30:06

我正在编写一个C#程序,它允许用户指定排序标准。例如,用户只能按"serviceName"进行排序,或者添加其他几个标准,如"isHD"或"isGood"。我的要求是,我想使用".Then By"语句,但用户决定我需要写多少次。

有什么方法可以让我在取决于开关/案例块的标准数量上获得一些灵活性吗?例如

List.OrderBy(t => t.name)
List.OrderBy(t => t.isHD).ThenBy(t => t.name)
List.OrderBy(t => t.isGood).ThenBy(t => t.name).ThenBy(t => t.isHD)

此外,这些标准的顺序将由用户选择。

';然后按';使用不同数量的标准

您可以使用通用方法:

    public List<T> SortBy<T>(List<T> list, params Func<T, object>[] selectors)
    {
        var ordered = list.OrderBy(selectors[0]);
        for (int i = 1; i < selectors.Count(); i++)
        {
            ordered= ordered.ThenBy(selectors[i]);
        }
        return ordered.ToList();
    }

运行它:

SortBy(List, x=>x.name, x=>x.isHD, x=>x.isGood)

这样做:

List.OrderBy(x=>x.name).ThenBy(x=>x.isHD).ThenBy(x=>x.isGood)

可以通过检查选择器是否通过

来改进

您可以将应用第一个排序顺序(即OrderBy)的结果分配给类型为IOrderedEnumerable的变量,然后在循环中调用ThenBy,根据需要多次分配给同一变量。