c# - 缩短简单的 C# 代码

标签 c# optimization switch-statement

我有这段代码可以完美地工作,但对我来说它并不漂亮。我想尽可能地缩短这段代码。 升序是 bool 值,排序是字符串。

if(ascending)
    switch (sort)
    {
        case "ID":
            return lstFiltered.OrderBy(o => o.ID).ToList();
        case "Device_Name":
            return lstFiltered.OrderBy(o => o.Device_Name).ToList();
        case "ErrorType_Name":
            return lstFiltered.OrderBy(o => o.ErrorType_Name).ToList();
        case "Error_Name":
            return lstFiltered.OrderBy(o => o.Error_Name).ToList();
        case "WAIT_TIME":
            return lstFiltered.OrderBy(o => o.WAIT_TIME).ToList();
        default:
            return lstFiltered;
    }
else
    switch (sort)
    {
        case "ID":
            return lstFiltered.OrderByDescending(o => o.ID).ToList();
        case "Device_Name":
            return lstFiltered.OrderByDescending(o => o.Device_Name).ToList();
        case "ErrorType_Name":
            return lstFiltered.OrderByDescending(o => o.ErrorType_Name).ToList();
        case "Error_Name":
            return lstFiltered.OrderByDescending(o => o.Error_Name).ToList();
        case "WAIT_TIME":
            return lstFiltered.OrderByDescending(o => o.WAIT_TIME).ToList();
        default:
            return lstFiltered;
    }

最佳答案

使用Reverse摆脱第二个开关:

// define sorted as IEnumerable<T> where T is the actual generic type of lstFiltered

switch (sort)
{
    case "ID":
        sorted = lstFiltered.OrderBy(o => o.ID);
        break;
    case "Device_Name":
        sorted = lstFiltered.OrderBy(o => o.Device_Name);
        break;
    case "ErrorType_Name":
        sorted = lstFiltered.OrderBy(o => o.ErrorType_Name);
        break;
    case "Error_Name":
        sorted = lstFiltered.OrderBy(o => o.Error_Name);
        break;
    case "WAIT_TIME":
        sorted = lstFiltered.OrderBy(o => o.WAIT_TIME);
        break;
    default:
        sorted = lstFiltered;
}

if (!ascending) // do reverse ordering
    sorted = sorted.Reverse();

return sorted.ToList();

关于c# - 缩短简单的 C# 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25152324/

相关文章:

c++ - 如何简洁地编写 'switch' 语句来猜测用户正在考虑的数字

objective-c - c中的模拟器/生成的switch语句范围

django - 如何为可能的斜线打点 Django 做好准备?

mysql - 需要建议优化 SQL 查询(更新 MySQL)

java - 当我使用字符串进行切换时出现错误

c# - 继承List<T>时如何在没有构造函数的情况下将数据传递给父类? C#

c# - Animate 如何改变 wpf 中的 ColumnDefinition 宽度?

c# - 在 C# 中创建具有多个屏幕的 Windows Mobile 应用程序的最佳方法是什么

c# - 使用 WPF 和 Caliburn.Micro 在一个 View 中添加多个 View

mysql - 修改查询以使其执行速度更快,但仍然得到相同的结果