こんにちは、Unityエンジニアのオオバです。

Enumに定義した全ての値名を配列で
取得したくなることがあります。

やりたいことのイメージはコチラ。

配列で取得したEnum
enum SampleEnum  
{
    Ne = 0, Ushi = 1, Tora = 2  
}

中身がNe, Ushi, Tora
簡単に配列を作りたい。

GetValuesメソッドを使う

【C#】もう間違えないEnumの値配列を取得する方法_0

Enum型に定義されたGetValuesメソッドで実現可能 です。

SampleEnum[] result  
    = (SampleEnum[])Enum.GetValues(typeof(SampleEnum));  

foreach(var value in result) Console.WriteLine(value);  
// 出力 :  Ne, Ushi, Tora  

いいまじないに力を与えるには、悪い言葉も知らなければいけない

天空の城ラピュタに出てくる名言。
悪い使用例とセットで覚えると
プログラミングの学習は効果的
です。

ということで書いてしまいがちは無駄な記述も紹介します。

👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

やってしまいがちなEnum加工の無駄な書き方

【C#】もう間違えないEnumの値配列を取得する方法_1

ここからは書いてしまいがちな
無駄な記法の紹介です。

  1. GetNamesで文字列の配列を取得
  2. ParseしてEnumとして取り出しリスト追加
// 1.GetNamesで文字列の配列を取得  
var enumNames = Enum.GetNames(typeof(SampleEnum));  
var result = new List();  
foreach (var enumName in enumNames)  
{
    // 2.ParseしてEnumとして取り出しリスト追加  
    var value = Enum.Parse(typeof(SampleEnum, enumName));  
    result.Add(value);  
}

これらの無駄なコストが
計上されていました。

【注意】受け取る型の違いで変化

【C#】もう間違えないEnumの値配列を取得する方法_2

配列に格納したEnumの値は
格納する変数の型で動的に変わります。

varで定義するとEnum型で受け取れる

foreachの型をvarで宣言すると、
格納される値はEnum型(この場合SampleEnum型)になります。

※文字列ではない
var values = Enum.GetValues(typeof(SampleEnum));  
// 「var」で受け取るとEnum型で取得  
foreach (var v in values) Debug.Log(v);  
// Ne, Ushi, Toraと出力される  

int型で定義するとint型で受け取れる

int型で受け取ると暗黙的に
キャストされてint型で取得できます。

var values = Enum.GetValues(typeof(SampleEnum));  
// 「int型」で受け取るとint型で取得  
foreach (int v in values) Debug.Log(v);  
// 0, 1, 2と出力される  

まとめ : Enumの値配列を取得するにはGetValuesを使う

【C#】もう間違えないEnumの値配列を取得する方法_3

Enumの値を配列で受け取る方法と、
やりがちなミス記法を紹介しました。

記事の内容を簡単にまとめます。

こんな感じです。

とりあえず GetValuesを覚えておきましょう。

そしてEnumの値配列から取得する時は、
受け取る宣言でEnum型、int型と変化しますので注意です。

「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
ぜひチャンネル登録をお願いします!

最後まで読んでいただきありがとうございました!
すばらしいC#ライフをお過ごしください。

オススメ記事