【发布时间】:2019-01-16 23:53:51
【问题描述】:
我有一个我认为不好的代码,因为它在每个 case 语句中都重复了类似的语句:
if (command.OrderProperty.ToLower().Equals("asc"))
{
accessForms.Forms = accessForms.Forms.OrderBy(o => o.NumberForSort).ToList();
}
else
{
accessForms.Forms = accessForms.Forms.OrderByDescending(o => o.NumberForSort).ToList();
}
唯一不同的是查询所依据的属性。
switch (command.SortProperty.ToLower())
{
case "number":
if (command.OrderProperty.ToLower().Equals("asc"))
{
accessForms.Forms = accessForms.Forms.OrderBy(o => o.NumberForSort).ToList();
}
else
{
accessForms.Forms = accessForms.Forms.OrderByDescending(o => o.NumberForSort).ToList();
}
break;
case "type":
if (command.OrderProperty.ToLower().Equals("asc"))
{
accessForms.Forms = accessForms.Forms.OrderBy(o => o.Type).ToList();
}
else
{
accessForms.Forms = accessForms.Forms.OrderByDescending(o => o.Type).ToList();
}
break;
case "employeename":
if (command.OrderProperty.ToLower().Equals("asc"))
{
accessForms.Forms = accessForms.Forms.OrderBy(o => o.EmployeeName).ToList();
}
else
{
accessForms.Forms = accessForms.Forms.OrderByDescending(o => o.EmployeeName).ToList();
}
break;
case "requestingemployeename":
(...)
}
accessForms.Forms 是 List<>。我想让这段代码更简洁更短,但我不知道如何实现。
【问题讨论】:
-
这更适合codereview.stackexchange.com,因为您有工作代码。但我认为你至少可以在 switch 中创建 lamba 表达式,并在 switch 之外处理排序顺序。
-
您不应该使用 TLower 但 ToUppad - .NET 针对上层比较进行了优化,而不是下层比较。 docs.microsoft.com/en-us/dotnet/standard/base-types/…
-
@TomTom 你也不应该使用。如果您想以不区分大小写的方式比较字符串,则应使用不区分大小写的比较器。