我有这段代码可以完美地工作,但对我来说它并不漂亮。我想尽可能地缩短这段代码。 升序是 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/