2013-02-15 110 views
0

按字母顺序排序typeof(EnumType)的有效方法是什么?排序后检索索引值Enum按字母顺序排列

枚举值的索引是非顺序的,但按字母顺序排序。 (即苹果= 5,香蕉= 2,哈密瓜= 3)

实例化临时是好的。

最终,我需要所选特定枚举值的索引代码。

我问,因为我想出了这个方法看起来不是最好的:

Array tmp = Enum.GetValues(typeof(EnumType)); 
string[] myenum = tmp.OfType<object>().Select(o => o.ToString()).ToArray(); 
Array.Sort(myenum); 
int enum_code = (int)Enum.Parse(typeof(EnumType), myenum.GetValue((int)selected_index).ToString()); 
string final_code = enum_code.ToString()); 
+0

您可以通过使用OrderBy(o => o.ToString())来简化第2行和第3行。但是,我并不是100%清楚你在这里试图达到什么目标。 – yoozer8 2013-02-15 17:43:11

+0

由于所选索引不直接映射创建的Array tmp的索引值。 (选定的索引是基于字母顺序,而tmp创建一个数组与索引顺序,增量,我需要诉诸,然后检索使用selected_index变量.. – 2013-02-15 21:31:27

回答

6

你可以使用LINQ编写更紧凑,更易于维护的代码。除非你是在高性能应用程序的内部循环这样做,我怀疑的LINQ的对你的原代码与任何其他可能执行的速度将所有重要:

var sorted = (from e in Enum.GetValues(typeof(EnumType)).Cast<EnumType>() 
       orderby e.ToString() select e).ToList(); 
+0

嗨我得到以下消息:错误无法找到查询模式的源类型'System.Array'。'OrderBy'未找到。请考虑明确指定范围变量'e'的类型。 – 2013-02-15 17:44:16

+1

尝试在代码顶部包含'using System.Linq;' – 2013-02-15 17:48:30

+0

这就是已经完成 – 2013-02-15 17:53:07

0

考虑到误差,一个更可怕的(和.net 2兼容)解决方案是;

SortedDictionary<string, MyEnumType> list = new SortedDictionary<string, MyEnumType>(); 
foreach (Enum e in Enum.GetValues(typeof(MyEnumType))) 
{ 
    list.Add(e.ToString(), (MyEnumType)e); 
} 

检索枚举;

MyEnumType temp = list["SomeValue"]; 
+0

对不起,可能我的问题还不够清楚。我最终需要该枚举值的索引。 – 2013-02-15 17:48:54