いんでぃーづ

個人でゲーム開発してる上で吸収したモノたち紹介。UnityからGIMPまでなんでも。デザインとかゲーム論まで語っちゃうよ的なアレ。

MENU

C#のEnumのtips

{スポンサーリンク}
{スポンサーリンク}

System.Enum クラス のメソッドを使うことで、いろいろ便利なことができます。

例として下のenumを使います。

public enum Weapon {
    Sword,
    Ax,
    Spear,
    Bow
}

Enumの定義を文字列で取得する

enum型は内部的には数値なので、要素名をそのまま文字列として扱いたい場合は Enum.GetName メソッドで変換する必要があります。

// Enumの要素を文字列として取得
string name = System.Enum.GetName (
    typeof(Weapon),
    Weapon.Ax
);

Debug.Log (name);

Enumをforeachでループ処理

すべての要素を一度に 配列 として取得することもできます。
これなら for や foreach で扱うことができるので便利です。

GetValues メソッドとGetNames メソッドが使えます。

GetValuesでループ

enum型か、int型で受けることができます。

enum型で受ける場合

        foreach (Weapon w in System.Enum.GetValues(typeof(Weapon))) {

数値で受ける場合

        foreach (int w in System.Enum.GetValues(typeof(Weapon))) {

もしくは

        foreach (var w in System.Enum.GetValues(typeof(Weapon))) {

GetNamesでループ

文字列配列で取得できます。

// Enumの要素を文字列として取得
string[] names = System.Enum.GetNames (typeof(Weapon));

// すべての要素を出力してみる
foreach (string name in names) {
    Debug.Log (name);
} 

Enumの数

上記の配列取得を応用して、Enumの定義数を取得できます。

// enum の定義がいくつあるか
int count = System.Enum.GetValues (typeof(Weapon)).Length;

Unityでのenum

インスペクタでenumシリアライズすると、定義を変更しようとしたときにちょっと困ったことになるので注意です。

以下の過去記事参照

indie-du.com

*参考 https://msdn.microsoft.com/ja-jp/library/cc138362.aspx

Amazon.co.jpアソシエイト