2020-01-07 更新

列挙体(Enum)で任意の数値や文字列を取得する方法

C#やJavaといった言語を複数使っていると列挙体(Enum)でどのような番号が振られるとか、文字列が使えるのがどっちだったかとか、よく忘れて毎回調べなおしていたので、数値や文字列への変換方法・定義の仕方などをメモとして残しておきます。

目次

  • 通常の列挙体の定義と変換
  • 任意の数値を割り当てる
  • 日本語ベースの列挙体
  • 任意の数値から文字列を取得する

通常の列挙体の定義と変換

列挙子を並べただけだと値は0から順番に振られます。


public enum EnumTest01
{
    aaa,    // 0
    bbb,    // 1
    ccc     // 2
}

列挙体を数値に変換する場合は以下のようにします。


var aaa = (int)EnumTest01.aaa;      // aaa = 0;
var bbb = (int)EnumTest01.bbb;      // bbb = 1;
var ccc = (int)EnumTest01.ccc;      // ccc = 2;

逆に数値から列挙体に変換する場合も同じような方法でできます。


var aaa = (EnumTest01)0;      // aaa = EnumTest01.aaa;
var bbb = (EnumTest01)1;      // bbb = EnumTest01.bbb;
var ccc = (EnumTest01)2;      // ccc = EnumTest01.ccc;

ToString()メソッドを使うと列挙した名称の文字列が取得できます。


var aaa = EnumTest01.aaa.ToString();      // aaa = "aaa";
var bbb = EnumTest01.bbb.ToString();      // bbb = "bbb";
var ccc = EnumTest01.ccc.ToString();      // ccc = "ccc";

任意の数値を割り当てる

任意の数値から順番に割り当てる場合は以下のようにします。


public enum EnumTest02
{
    aaa = 10,   // 10
    bbb,        // 11
    ccc         // 12
}

すべての列挙子に任意の数値を割り当てることも可能です。


public enum EnumTest03
{
    aaa = 10,   // 10
    bbb = 20,   // 20
    ccc = 30    // 30
}

日本語ベースの列挙体

列挙体には日本語をセットすることも可能です。


public enum EnumTest04
{
    テスト1 = 10,
    テスト2 = 20,
    テスト3 = 30
}

C#の列挙体は文字列で定義できないと思っていましたが、上記のように可能です。

ただし、以下のように先頭が記号や数値、文字中にスペースを含んだりすると、半角、全角かかわらずにエラーになります。


public enum EnumTest04
{
    1テスト = 10,   // NG
    2テスト = 20,  // NG
    $テスト = 30    // NG
    テスト 4 = 30  // NG
}

任意の数値から文字列を取得する

ToString()で列挙体自体の文字列を取得することは可能ですが、前述の”日本語ベースの列挙体”のように先頭が数値や記号だった場合に問題があるので、コードとコードに紐づいた文字列を定義したい場合、以下のようにDictionary(ディクショナリ)を使います。


public class EnumTest05
{
    public enum Id
    {
        aaa = 10,
        bbb = 20,
        ccc = 30,
    }

    public static Dictionary<Id, string> Name = new Dictionary<Id, string>
    {
        {Id.aaa, "10台"},
        {Id.bbb, "20台"},
        {Id.ccc, "30台"},
    };
}

コードに紐づいた文字列を取得する場合は以下の通り。


var aaa = EnumTest05.Name[EnumTest05.Id.aaa];      // aaa = "10台";
var bbb = EnumTest05.Name[EnumTest05.Id.bbb];      // bbb = "20台";
var ccc = EnumTest05.Name[EnumTest05.Id.ccc];      // ccc = "30台";

C#】関連記事