スポンサーリンク

[C#] enum(列挙型)について

enum型はユーザー(プログラムを書いている人)が定義する名前付きの定数を持った型です。
定数には整数型の値を設定することが出来ます。
コードの名前と値を紐づけて特定の値しか指定しないときなどに使います。

enum型の使い方

列挙型を定義するにはenumキーワードを使ってこんな感じに書きます。

enum 型名
{
    定数の名前 = 定数の値,
    定数の名前 = 定数の値,
    定数の名前 = 定数の値
}

実際の定義のコードはこんな感じ。

enum week
{
    Sunday = 10,
    Monday = 20,
    Tuesday = 30,
    Wednesday = 40,
    Thursday = 50,
    Friday = 60,
    Saturday = 70
}

使うときはこんな感じ。

using System;

class Program
{
    // enum型weekの定義
    enum week {
        Sunday = 10,
        Monday = 20,
        Tuesday = 30,
        Wednesday = 40,
        Thursday = 50,
        Friday = 60,
        Saturday = 70
    }

    public static void Main()
    {
        // enum型の変数の定義
        week w1, w2;

        // 値の代入(名前で指定)
        w1 = week.Saturday;

        // 値の代入(値で指定)、キャストする必要がある
        w2 = (week)40;

        // 変数の内容を出力、名前はToStringメソッドで値はキャストすると取得できる
        Console.WriteLine($"w1 定数の名前 = {w1.ToString()}、定数の値 = {(int)w1}");
        Console.WriteLine($"w2 定数の名前 = {w2.ToString()}、定数の値 = {(int)w2}");
    }
}

出力結果はこんな感じ、

w1 定数の名前 = Saturday、定数の値 = 70
w2 定数の名前 = Wednesday、定数の値 = 40

定数の値の指定を省略した場合

定数の値は省略することができます。
その場合、上から順に0から順番にint型の値が設定されます。
さらに途中で値が指定されている場合、その値から順番に値が設定されます。

using System;
class Program
{
    // enum型weekの定義
    enum week {
        Sunday,
        Monday,
        Tuesday,
        Wednesday = 100,  //途中で値を指定
        Thursday,
        Friday,
        Saturday
    }

    public static void Main()
    {
        // enumの値を出力
        Console.WriteLine($"{(int)week.Sunday}");
        Console.WriteLine($"{(int)week.Monday}");
        Console.WriteLine($"{(int)week.Tuesday}");
        Console.WriteLine($"{(int)week.Wednesday}");
        Console.WriteLine($"{(int)week.Thursday}");
        Console.WriteLine($"{(int)week.Friday}");
        Console.WriteLine($"{(int)week.Saturday}");
    }
}
0
1
2
100
101
102
103

定義されている要素の取り出し方

enum型で定義されている要素はEnum.GetValuesメソッドを使って取り出すことができる。

using System;
class Program {
    // enum型weekの定義
    enum week {
        Sunday,
        Monday,
        Tuesday,
        Wednesday = 100,  //途中で値を指定
        Thursday,
        Friday,
        Saturday
    }

    public static void Main() {
        //enumで定義されている要素をforeachで取り出す
        foreach(var w in Enum.GetValues(typeof(week))) {
            Console.WriteLine($"名前={w}、値={(int)w}");
        }
    }
}
名前=Sunday、値=0
名前=Monday、値=1
名前=Tuesday、値=2
名前=Wednesday、値=100
名前=Thursday、値=101
名前=Friday、値=102
名前=Saturday、値=103

定義されている整数かどうかチェック

定義されていない整数も代入できてしまう、、、

using System;
class Program {
    // enum型weekの定義
    enum week {
        Sunday,
        Monday,
        Tuesday,
        Wednesday = 100,  //途中で値を指定
        Thursday,
        Friday,
        Saturday
    }

    public static void Main() {
        // enum型の変数の定義
        week w1, w2;

        // 定義されていない値も代入できてしまう
        w1 = (week)999;
        Console.WriteLine($"名前={w1}、値={(int)w1}");
    }
}
名前=999、値=999

Enum.IsDefinedメソッドで定義されているかチェックできる。

using System;
class Program {
    // enum型weekの定義
    enum week {
        Sunday,
        Monday,
        Tuesday,
        Wednesday = 100,  //途中で値を指定
        Thursday,
        Friday,
        Saturday
    }

    public static void Main() {
        // 定義されているかチェックする
        int num1 = 999;
        if (Enum.IsDefined(typeof(week), num1)) {
            Console.WriteLine($"{num1}は定義されています。");
        } else {
            Console.WriteLine($"{num1}は定義されていません。");
        }
    }
}
999は定義されていません。

文字列で名前を指定してenum型の変数に代入

こんな感じでEnum.TryParseメソッドを使うといい感じに代入できる。

using System;
class Program {
    // enum型weekの定義
    enum week {
        Sunday,
        Monday,
        Tuesday,
        Wednesday = 100,  //途中で値を指定
        Thursday,
        Friday,
        Saturday
    }

    public static void Main() {
        // 代入したい名前の文字列
        string name = "Monday";

        // TryParseメソッドを使って変換できるかチェック
        if (Enum.TryParse(name, out week w)) {
            // 変換成功(変数wに変換されたweek型の値が入っている)
            Console.WriteLine($"名前={w}、値={(int)w}");
        }
        else {
            // 変換失敗
            Console.WriteLine($"{name} は変換できませんでした。");
        }
    }
}
名前=Monday、値=1

enumの使い道

enumの使い方を紹介します。

メソッドの引数に特定の値を受け取りたいとき

メソッドの引数にenum型を指定するとenumで定義された値だけを受け取ることができる。

using System;
class Program
{
    // enum型weekの定義
    enum week {
        Sunday,
        Monday,
        Tuesday,
        Wednesday = 100,  //途中で値を指定
        Thursday,
        Friday,
        Saturday
    }

    // 引数にenum型を指定して定義した値のどれかだけを指定できるようにできる
    static void TestMethod(week w) {
        Console.WriteLine($"引数は {w} です。");
    }

    public static void Main()
    {
        // メソッドを実行
        TestMethod(week.Friday);
    }
}
引数は Friday です。

C# 記事まとめページに戻る(他のサンプルコードもこちら)

C# プログラミング講座
C#についての記事まとめページです。開発環境VisualStudioのインストール方法や使い方、プログラミングの基礎知識についてや用語説明の記事一覧になっています。講座の記事にはすぐに実行できるようにサンプルコードを載せています。

コメント