0

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());
4

2 に答える 2

6

Linqを使用して、よりコンパクトで保守しやすいコードを記述できます。高性能アプリケーションの内部ループでこれを行っていない限り、Linqの速度、元のコード、その他の可能な実装の速度がまったく問題になるとは思えません。

var sorted = (from e in Enum.GetValues(typeof(EnumType)).Cast<EnumType>()
              orderby e.ToString() select e).ToList();
于 2013-02-15T17:40:48.200 に答える
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"];
于 2013-02-15T17:47:52.983 に答える