※動作確認:Unity5
int
intからenumに変換
なにか整数の列挙型があったとして:
enum SomeEnum { |
intからenumの値に変換するには、単にキャストするか:
int x = 1; |
または Enum.ToObject を使う:
using System; // for Enum |
enumで定義されてない値をキャストするとどうなるか?
enumで定義されてないint値から変換すると:
int y = 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"); |
- 対応するenum定義がなかった場合には
ArgumentException
が発生する。それを避けるには TryParse を使いたいところだが、Unity5のC#では存在しなかった…