列挙体(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台";