いんでぃーづ

ゲームいろいろ、いろいろ自由

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;

int値をEnumに変換する

int test = 1;
Weapon weapon = (Weapon)Enum.ToObject(typeof(Weapon), test);

Unityでのenum

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

以下の過去記事参照

indie-du.com

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


“Unity” and Unity logos are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere, and are used under license.


免責事項

当サイトの広告バナー、リンクによって提供される情報、サービス内容について、当サイトは一切の責任を負いません。

また、当サイトの情報を元にユーザ様が不利益を被った場合にも、当サイトは一切の責任を負いません。

すべて自己責任でお願いします。