【问题标题】:How to sort a list of enums by the enum indexes in C#?如何按 C# 中的枚举索引对枚举列表进行排序?
【发布时间】:2016-07-19 10:49:59
【问题描述】:

我有一个enum

public enum Group
{
    Administration = 1,
    Lawyers,
    PropertyManagement
    Bookkeeping,
    Secretariat
}

我还有一个ListGroupList<Group>。我需要一种简单的方法来按枚举索引对列表的值进行排序。

例如,这个列表:

{ Group.Bookkeeping, Group.Administration, Group.Secretariat, Group.Administration }

会变成:

{ Group.Administration, Group.Administration, Group.Bookkeeping, Group.Secretariat }

(管理第一,簿记第二,秘书处最后,就像在枚举的定义中一样)。我正在寻找一种简单的方法(可能使用linq),无需手动循环左右。

【问题讨论】:

  • 你可以使用继承而不是Enum,从长远来看这会给你带来好处。
  • @Callum 我看不出继承与这里有什么关系。
  • 我更关注的是,他使用枚举来描述某个对象,而该对象又描述了一个现实生活领域。其中,您可以通过使用继承来描述现实生活领域来消除一些可怕的代码(例如 if、switch)。所以让管理员成为一个实际的对象(因为管理员不同于簿记员)@CodeCaster
  • @Callum 你使用继承来描述和实现行为的差异。这个问题没有提到任何这些。
  • 我知道,我正在阅读超出问题@CodeCaster

标签: c# list enums


【解决方案1】:

Array.Sort()默认使用底层类型来比较元素:

List<Group> groups = new List<Group>()
{
    Group.Bookkeeping, Group.Administration, Group.Secretariat, Group.Administration
};

groups.Sort();

【讨论】:

  • 你真的明白我误解了什么。谢谢。
【解决方案2】:

枚举基本上是一个整数类型,它的成员从 0 开始编号,默认以 1 递增。鉴于您提供了一个起始索引,即Administration = 1,您的枚举编号如下:

Administration = 1
Lawyers = 2
PropertyManagement = 3
Bookkeeping = 4
Secretariat = 5

因此,您可以简单地使用集合的默认排序进行排序,如 Sorting a List<int> 中所述。

【讨论】:

    【解决方案3】:

    你可以使用 Linqs OrderBy:

    List<Group> orderedGroups = groups.OrderBy(g => g).ToList();
    

    【讨论】:

      猜你喜欢
      • 2017-07-21
      • 2021-05-10
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      相关资源
      最近更新 更多