2020年始初っ端からEnumの値をコレクションとして取得する上で間違った扱いをしていたことをメモしておきます。
enum SampleEnum { Ne = 0, Ushi = 1, Tora = 2 } List<SampleEnum> result; //中身が Ne, Ushi, Toraとしたい
GetValuesだけでよかった
以下のような無駄な書き方をしていました。
※GetNamesで文字列の配列を取得した後、ParseしてEnumとして取り出しリストに突っ込む。
var enumNames = Enum.GetNames(typeof(SampleEnum)); var result = new List<SampleEnum>(); foreach (var n in enumNames) { var e = Enum.Parse(typeof(SampleEnum, n)); result.Add(e); }
以下のようにGetValues
メソッドだけでEnumの配列は取得できちゃっておりました。
var result = Enum.GetValues(typeof(SampleEnuum));
受け入れる変数の型で変わる
ここからは余談ですが、コレクションに格納したEnumの値は受け入れる変数の型で動的に変わります。
varにするとEnum型になる
以下のようにforeachの変数の型をvarとすれば格納される値はEnum(ここではSampleEnum型)になります。
※文字列ではありません
var values = Enum.GetValues(typeof(SampleEnum)); foreach (var v in values) Debug.Log(v); // Ne, Ushi, Toraと出力される
以下のようにint型と定義すればintで取得できます。
var values = Enum.GetValues(typeof(SampleEnum)); foreach (int v in values) Debug.Log(v); // 0, 1, 2と出力される
最後に
今年も相変わらず既出はガン無視して自分が知らなかったことを公開していくブログとして続けていく所存です。 2020年も渋谷ほととぎす通信をよろしくお願いいたします。