C#で列挙型への変換

2015-06-03
blog

※動作確認: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.aspx) を使う:

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.aspx) を使う:

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

string

stringからenumに変換

Enum.Parse.aspx) を使う

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