2013-02-15 112 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