こんにちは、Unityエンジニアのオオバです。
Enumに定義した全ての値名を配列で
取得したくなることがあります。
やりたいことのイメージはコチラ。
enum SampleEnum
{
Ne = 0, Ushi = 1, Tora = 2
}
中身がNe, Ushi, Tora
の
簡単に配列を作りたい。
GetValuesメソッドを使う
Enum型に定義されたGetValuesメソッドで実現可能 です。
SampleEnum[] result
= (SampleEnum[])Enum.GetValues(typeof(SampleEnum));
foreach(var value in result) Console.WriteLine(value);
// 出力 : Ne, Ushi, Tora
いいまじないに力を与えるには、悪い言葉も知らなければいけない
天空の城ラピュタに出てくる名言。
悪い使用例とセットで覚えると
プログラミングの学習は効果的 です。
ということで書いてしまいがちは無駄な記述も紹介します。
👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!
やってしまいがちなEnum加工の無駄な書き方
ここからは書いてしまいがちな
無駄な記法の紹介です。
- GetNamesで文字列の配列を取得
- 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);
}
- Listの生成
- Parse処理
これらの無駄なコストが
計上されていました。
【注意】受け取る型の違いで変化
配列に格納した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を使う
Enumの値を配列で受け取る方法と、
やりがちなミス記法を紹介しました。
記事の内容を簡単にまとめます。
- GetValuesを使えばOK
- 受け取る型宣言で型が変わる
こんな感じです。
とりあえず GetValuesを覚えておきましょう。
そしてEnumの値配列から取得する時は、
受け取る宣言でEnum型、int型と変化しますので注意です。
この記事が気に入ったらフォローしよう
「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
ぜひチャンネル登録をお願いします!
最後まで読んでいただきありがとうございました!
すばらしいC#ライフをお過ごしください。