我正在填充一个DropDownListMVC 4 enum,我想从最大到最小的顺序排列枚举值.但是,似乎没有直接的方法来解决这个问题.目前,我正在使用此代码添加到字典中,其中键是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());
}
Run Code Online (Sandbox Code Playgroud)
我不相信将枚举值放入列表并向后循环是最有效的方法.枚举中只有四个值,但是有更好的方法对OrderBy返回的内容执行操作Enum.GetValues吗?我知道这可能是对我这样做的最小性能影响,但我想知道更大的枚举.
Jon*_*eet 24
听起来你只是想要:
var priorities = ((Models.Priority[]) Enum.GetValues(typeof(Models.Priority)))
.OrderByDescending(x => x);
Run Code Online (Sandbox Code Playgroud)
或者避免使用相同数量的括号:
var priorities = (Models.Priority[]) Enum.GetValues(typeof(Models.Priority));
var ordered = priorities.OrderByDescending(x => x);
Run Code Online (Sandbox Code Playgroud)
通过给你一本字典,目前尚不清楚你当前的代码是如何帮助你的 - 但上面肯定会给你一系列枚举值,从最高到最低排序.您不需要转换为int,因为相同类型的枚举值已经相互比较.
如果您需要一个列表,请ToList()在通话后OrderByDescending拨打电话.
usr*_*usr 13
那这个呢:
Enum.GetValues(typeof(Models.Priority))
.Cast<Models.Priority>()
.OrderBy(x => (int) x)
.ToList();
Run Code Online (Sandbox Code Playgroud)
不要使用,OfType因为它会默默地丢弃不匹配的项目.这几乎总是一个错误.
| 归档时间: |
|
| 查看次数: |
20992 次 |
| 最近记录: |