読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

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

列挙型と数値or文字列との相互変換や項目数の取得など【C#】


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

列挙型

今回は列挙型と呼ばれるenumに対しての処理というか使い方についての記事です。

public enum StatusType{
  HP = 0, ATK, DEF, SPD
}


上記のようなRPGの能力を表したenumを例として使っていきます。


列挙型→数値or文字列

enumの項目を数値や文字列に変換するには以下のようにします。

int    atkNo  = (int)StatusType.ATK;
string atkStr = StatusType.ATK.ToString ();

Debug.Log (atkStr + " : " + atkNo);

ATK : 1


数値にするには(int)、文字列にするにはToString()を使います。


また、各項目の数値は最初の項目(StatusTypeならHP)から1づつ増えてきます。

なので、例えばHP = 1にすれば、 ATKは2になります。


数値or文字列→列挙型

数値や文字列をenumの項目に変換するには以下のようにします。

なお、Enumを使うにはusing Systemが必要です。

StatusType status1 = (StatusType)Enum.ToObject(typeof(StatusType), 2);
StatusType status2 = (StatusType)Enum.Parse(typeof(StatusType), "SPD");

Debug.Log (status1 + " : " + status2);

DEF : SPD


数値から変換するにはEnum.ToObject()

文字列から変換するにはEnum.Parse()を使います。


項目数の取得、列挙

enumの項目数を取得と全項目を列挙するには以下のようにします。

Array statusTypeArray = Enum.GetValues (typeof(StatusType));
Debug.Log ("項目数 : " + statusTypeArray.Length);

foreach(StatusType statusType in statusTypeArray){
  Debug.Log (statusType);
}

項目数 : 4
HP
ATK
DEF
SPD


Enum.GetValuesでEnumの項目をArrayに出来ます。

このArrayのLengthを見れば項目数が分かりますし、foreachで回せば全項目が列挙出来ます。


TypeData

enumに対する便利メソッドみたいなものと、汎用的使うenumを定義するクラス、

TypeDataをいつも使っているので、ついでにこれもご紹介!



使い方は以下の通りです。

string atkStr = TypeData.StatusType.ATK.ToString();
int    atkNo  = (int)TypeData.StatusType.ATK;

//入力されたkeyが設定されたタイプに含まれるか判定
if(TypeData.ContainsKey<TypeData.StatusType>(atkStr)){
  Debug.Log ("ATKあるよ!");
}

//入力されたkeyと同じ列挙型の項目を取得する
Debug.Log (TypeData.KeyToType<TypeData.StatusType>(atkStr));

//入力されたNoと同じ列挙型の項目を取得する
Debug.Log (TypeData.NoToType<TypeData.StatusType>(atkNo));

//指定した列挙型の項目数を取得する
Debug.Log (TypeData.GetTypeNum<TypeData.StatusType>());

ATKあるよ!
ATK
ATK
4


各メソッドはジェネリックメソッドにしてあるので、

<>内を変えれば他のenumでも使えて便利!


下三つのメソッドの処理が1行しか無いので、コードが劇的に短くなったりはしないのですが、

Enum.Parseをそのまま使うよりKeyToTypeのが分かり易いかな〜と思ったりしとります。