(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]



列挙型(enum)の項目数取得したり、ランダムに取得したり、全項目を取得したり、番号や文字列から変換したり【C#】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2018.3.4f1


はじめに

今回は列挙型(enum)の項目数取得したり、ランダムに取得したりといった

enumの汎用的な便利メソッドをまとめた便利クラスの紹介です!


前にも似たような記事を書きましたが、





これらのまとめ&進化版みたいな感じになります!


EnumUtility

さっそくですがenumの汎用的な便利メソッドをまとめた便利クラス、EnumUtilityのコードです。



一応、各メソッドのTは構造体に制限(where T : struct)してますが、

enumではなく、普通の構造体でも使えてしまう点には注意が必要です。


もし、enum以外で使われた場合をチェックを追加したいみたいな時は以下のようなコードが使えます。

Type type = typeof(T);
if(!type.IsEnum){
  /*enumじゃない時の処理*/
}


ちなみにC#7.3からはGenericの制約にEnumが使えるようなってるそうです。



では、次項からは各メソッドの内容と使い方を説明していきます。


GetTypeNum : 項目数を取得

GetTypeNumはenumの項目数を取得するメソッドです。

//色の種類
public enum ColorType {
  Red, Blue, Green, Black, White, Grey
}
//ColorTypeの項目数を取得 (6を取得)
int colorTypeNum = EnumUtility.GetTypeNum<ColorType>();



GetRandom : 項目をランダムに一つ取得

GetRandomは項目をランダムに一つ取得するメソッドです。

//色の種類
public enum ColorType {
  Red, Blue, Green, Black, White, Grey
}
//ColorTypeのどれかを取得 (Red, Blue, Green, Black, White, Greyのどれかを取得)
ColorType colorType = EnumUtility.GetRandom<ColorType>();



GetAllInList : 全ての項目が入ったListを取得

GetAllInListは全ての項目が入ったListを取得するメソッドです。

//色の種類
public enum ColorType {
  Red, Blue, Green, Black, White, Grey
}
//ColorTypeの全項目を取得 (Red, Blue, Green, Black, White, Greyが入ったListを取得)
List<ColorType> colorTypeList = EnumUtility.GetAllInList<ColorType>();



KeyToType : 入力された文字列と同じ項目を取得

KeyToTypeは入力された文字列と同じ項目を取得するメソッドです。

//色の種類
public enum ColorType {
  Red, Blue, Green, Black, White, Grey
}
//"Green"という文字列の項目を取得 (ColorType.Greenを取得)
ColorType colorType = EnumUtility.KeyToType<ColorType>("Green");



NoToType : 入力された番号の項目を取得

NoToTypeは入力された番号の項目を取得するメソッドです。

//色の種類
public enum ColorType {
  Red, Blue, Green, Black, White, Grey
}
//ColorTypeの0から数えて4番目の項目を取得 (Whiteを取得)
ColorType colorType = EnumUtility.NoToType<ColorType>(4);



ContainsKey : 入力された文字列の項目が含まれているか

ContainsKeyは入力された文字列の項目が含まれているか判定するメソッドです。

//色の種類
public enum ColorType {
  Red, Blue, Green, Black, White, Grey
}
//ColorTypeにPinkという項目があるか判定 (ないのでfalseを取得)
bool containsKey = EnumUtility.ContainsKey<ColorType>("Pink");



ExcuteActionInAllValue : 全ての項目に対してデリゲートを実行

ExcuteActionInAllValueは全ての項目に対してデリゲートを実行するメソッドです。

//色の種類
public enum ColorType {
  Red, Blue, Green, Black, White, Grey
}
//全項目をログに出力する (Red, Blue, Green, Black, White, Greyが出力される)
EnumUtility.ExcuteActionInAllValue<ColorType>((ColorType colorType) => {
  Debug.Log(colorType);
});


なお、そもそもデリゲートやラムダ式が分からんという方は以下の記事を参照の事。