我正在从 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/