渋谷ほととぎす通信

新しいこと、枯れたこと問わずサムザップ大庭が興味を持ったものを調査、生活の効率を求める完全趣味の技術ブログ。基礎を大事にしています。※あくまで個人ブログであり所属組織とは関係ありません

もう間違えないEnumの値配列を取得する方法


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年も渋谷ほととぎす通信をよろしくお願いいたします。