3流プログラマのメモ書き

元開発職→現社内SEの三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(.Net)動的に列挙型の値を取得したい(文字列から列挙型の値にしたい)

列挙型の値を指定するときに、動的に出来れば便利って思ってました。

例えば、

enum Hoge{
  alpha,
  bravo,
  charlie,
  delta,
  echo
}

という列挙型があって、設定ファイルから読み込んだ文字列値を元にこの列挙型を設定したい時などです。

そのような場合は、以下のように Enum.Parse メソッドを使うといいようです。

namespace Piyo{
  enum Hoge{
    alpha,
    bravo,
    charlie,
    delta,
    echo
  }
  
  //クラスの定義は省略 以下はとあるクラスのとあるメソッド内と思って
  string value = "alpha";
  Hoge x = (Hoge)Enum.Parse( Type.GetType("Piyo.Hoge"), value );
  
}

Enum.Parseの最初の引数には列挙型の型を指定します。 以下のようにしても構いません。

Enum.Parse(typeof(Hoge), value)

ただ、Type.GetTypeを使ったほうがこの列挙型のTypeオブジェクト自体も動的に設定することができます。

2番目の引数に、列挙型で設定されている項目と対応する文字列を設定します。

参考:
@IT:連載 改訂版 C#入門 第16章 列挙型の活用
列挙体(Enum)値を動的に取得する (System.Enum.Parse) - いろいろ備忘録日記