目次

文字列からenum型の値を取得する - string型からenum型への変換

文字列名からenumの値を取得するコードを紹介します。

UI

下図のUIを準備します。

コード

下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace StringToEnum
{
  public partial class FormMain : Form
  {
    public enum PictureMode { PM_COLOR, PM_MONOCROME, PM_SEPIA, PM_NONE }

    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      string str = textBox1.Text;
      try {
        PictureMode pm = (PictureMode)Enum.Parse(typeof(PictureMode), str);

        switch (pm) {
          case PictureMode.PM_COLOR:
            label1.Text = "OK COLOR";
            break;
          case PictureMode.PM_MONOCROME:
            label1.Text = "OK MONOCROME";
            break;
          case PictureMode.PM_SEPIA:
            label1.Text = "OK SEPIA";
            break;
          case PictureMode.PM_NONE:
            label1.Text = "OK NONE";
            break;
          default:
            label1.Text = "NG";
            break;
        }
      }
      catch (ArgumentException exc) {
        label1.Text = "NG";
      }
    }

    private void button2_Click(object sender, EventArgs e)
    {
      label1.Text = typeof(PictureMode).FullName;
    }
  }
}

解説

PictureMode pm = (PictureMode)Enum.Parse(typeof(PictureMode), str);
のEnum.Parseメソッドを用いて文字列からenum値を取得します。第一引数には対象とするenum型のSystem.Typeオブジェクトを与え、第二引数に文字列の値を与えます。戻り値はobject型で戻るためキャストします。
今回はenum型が取得できたかを検証するためにswitch文で取得したenum値を判定しています。

Button2のイベントハンドラはPictureMode列挙型のフルネームを取得するコードです。

実行結果

アプリケーションを実行します。下図の画面が表示されます。


テキストボックスに"PM_MONOCROME"と入力し[Button1]を押します。文字列からPictureMode列挙型の値が取得でき、ラベルにOK MONOCROMEのメッセージが表示されました。


Button2をクリックします。PictureMode列挙型のフルネームがラベルに表示されました。

参考

System.Typeの取得はtypeofを用いますが、列挙型のフルネームの文字列からも取得できます。この場合はType.GetType()メソッドを用います。先のButton1のClickイベントは以下のように記述しても同じ動作をします。
private void button1_Click(object sender, EventArgs e)
{
  string str = textBox1.Text;
  try {
    PictureMode pm = (PictureMode)Enum.Parse(
      Type.GetType("StringToEnum.FormMain+PictureMode"), str);

    switch (pm) {
      case PictureMode.PM_COLOR:
        label1.Text = "OK COLOR";
        break;
      case PictureMode.PM_MONOCROME:
        label1.Text = "OK MONOCROME";
        break;
      case PictureMode.PM_SEPIA:
        label1.Text = "OK SEPIA";
        break;
      case PictureMode.PM_NONE:
        label1.Text = "OK NONE";
        break;
      default:
        label1.Text = "NG";
        break;
    }
  }
  catch (ArgumentException exc) {
    label1.Text = "NG";
  }
}
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2012-03-13
iPentec all rights reserverd.