c# - Enum.GetValues() 上的 OrderBy

标签 c# linq enums

我正在从 enum 中填充 MVC 4 中的 DropDownList,我想对枚举值从大到小进行排序。但是,似乎没有直接的方法来解决这个问题。目前,我正在使用此代码添加到字典中,键是 ID,值是显示文本:

var priorities = Enum.GetValues(typeof(Models.Priority)).OfType<Models.Priority>().ToList();

for (int i = priorities.Count - 1; i >= 0; i--)
{
    Models.Priority priority = priorities[i];
    prioritiesDictionary.Add((int)priority, "Priority " + ((int)priority).ToString());
}

我不认为将枚举值放入列表并向后循环是最有效的方法。枚举中只有四个值,但是是否有更好的方法对从 Enum.GetValues 返回的内容执行 OrderBy 操作?我知道按照我的方式这样做可能对性能影响很小,但我想知道更大的枚举。

最佳答案

听起来你只是想要:

var priorities = ((Models.Priority[]) Enum.GetValues(typeof(Models.Priority)))
                                          .OrderByDescending(x => x);

或者为了避免尽可能多的括号:

var priorities = (Models.Priority[]) Enum.GetValues(typeof(Models.Priority));
var ordered = priorities.OrderByDescending(x => x);

目前尚不清楚您当前的代码如何为您提供字典 - 但上面肯定会为您提供一系列枚举值,从最高到最低排序。您不需要转换为 int,因为相同类型的枚举值已经可以相互比较。

如果您需要一个列表,只需在 OrderByDescending 调用之后调用 ToList()

关于c# - Enum.GetValues() 上的 OrderBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19599252/

相关文章:

xcode - 错误消息 : Enumeration value 'GameMoveNineEnum' not handled in switch?

c# - 如何避免在 C# 命名空间中定义冗余枚举?

c# - 我什么时候使用 Task.Yield()?

c# - 如何以编程方式提取 AnonymousType?

c# - Roslyn,如何在运行时在脚本中实例化一个类并调用该类的方法?

c# - 无法在 List<anonymous> LINQ 中应用 Union

c# - 将 GUID 转换为字符串 Entity Framework

c# - 如何重构胖接口(interface)?

c# - List.add 使用 Linq

list - 创建保存另一种数据类型的特定值的数据类型