枚举中的switch语句。如何提高性能?

时间:2018-07-03 16:42:05

标签: c# performance linq

我有一个要使用Linq OrderByDescending排序的项目列表。 排序作为值传递给switch语句。

items.OrderByDescending((SomeObject)i => {
   switch(cond)
   {
      case "conditionA":
        return (float)i.MemberA;
      case "conditionB":
        return (long)i.MemberB;
      case "conditionC":
        return (int)i.MemberB;
   }})

我担心的是此循环的性能。 有没有一种方法可以预定义返回值并将其一次传递到循环中?

1 个答案:

答案 0 :(得分:5)

您可以将开关移到OrderByDescending方法之外。只需将lambda定义为Func<SomeObject, float>并在linq查询之前分配它即可:

Func<SomeObject, float> orderBy = null;
switch (cond)
{
    case "conditionA":
        orderBy = i => (float)i.MemberA;
        break;
    case "conditionB":
        orderBy = i => (float)i.MemberB;
        break;
    default:
        orderBy = i => (int)i.MemberC;
        break;
}

现在您可以在排序中使用该lambda了

var res = items.OrderByDescending(orderBy);

如果itemsIQueriable,则可以将Func<...>更改为Expression<Func<...>>