按字母顺序排序枚举后检索索引值

时间:2013-02-15 17:37:37

标签: c# linq

按字母顺序排序typeof(EnumType)的有效方法是什么?

枚举值具有非顺序索引,但按字母顺序排序。 (即苹果= 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());

2 个答案:

答案 0 :(得分:6)

您可以使用Linq编写更紧凑和可维护的代码。除非你在高性能应用程序的内部循环中执行此操作,否则我怀疑Linq与原始代码相比其他任何可能实现的速度都很重要:

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

答案 1 :(得分: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"];