C#で列挙型への変換

2015-06-03

※動作確認:Unity5

int

intからenumに変換

なにか整数の列挙型があったとして:

enum SomeEnum {
FOO = 1,
BAR,
BAZ,
}

intからenumの値に変換するには、単にキャストするか:

int x = 1;
SomeEnum ex = (SomeEnum) x;
Debug.Log(ex); //=> FOO

または Enum.ToObject を使う:

using System;  // for Enum

SomeEnum ex = (SomeEnum) Enum.ToObject(typeof(SomeEnum), x);

enumで定義されてない値をキャストするとどうなるか?

enumで定義されてないint値から変換すると:

int y = 12345;
SomeEnum ey = (SomeEnum) y;
Debug.Log(ey); //=> 12345

例外などは出ずに代入できてしまう(Enum.ToObjectを使っても同様)。なのでenum型を使用していてもキャストを使ってしまっては定義した値だけが入っているとは限らない。この辺Cと同じ。

intの値がenumで定義されているかどうか調べる

int値がenumで定義されている値かどうかを調べるには Enum.IsDefined を使う:

Enum.IsDefined(typeof(SomeEnum), y);  //=> False

string

stringからenumに変換

Enum.Parse を使う

SomeEnum ex = (SomeEnum) Enum.Parse(typeof(SomeEnum), "FOO");
Debug.Log(ex); //=> FOO
  • 対応するenum定義がなかった場合には ArgumentException が発生する。それを避けるには TryParse を使いたいところだが、Unity5のC#では存在しなかった…