プログラミングを試してみたい人向けのC#プログラミングチュートリアル

enum(列挙型)

POINT
  • enumを使うことで可読性が上がる
  • enumの型変換の使い方を知る
目次


・スクールは200,000円など高額、Freeksはサブスク型で10,780円から受講可能
・合うか不安でも、Freeksなら入会金0円、いつでも退会可能だから気軽に始められる
・途中で学ぶ言語を変更してもOK、追加料金なし
24時間いつでも質問が可能、現役エンジニアが回答
・学習のみならず、転職支援もサポートあり、転職成功率は94.8%

enum(列挙型)とは

enumは決まった関連する定数の集合を定義したデータ型です。
例えば、曜日のように決まった値(月、火、水、木、金)が存在する場合に、名前を付けて型として管理ができるようにします。
名前を付けられるので、可読性が上がる効果があります。

enum(列挙型)の使い方

次のようにクラス内に定義します。
publicやprivateなどアクセス修飾子を付けます。
enum の後ろに列挙型の名称を付けて、続けて{}の中にカンマ区切りで値の名称を列挙します。

使い方
    public enum 列挙型名
    {
        値1の名称,
        値2の名称,
        ・・・
    }
使用例
    public enum Colors
    {
        red = 1,
        blue = 2,
        green = 3,
        yellow = 4
    }

enumを使ったサンプルプログラム

サンプルプログラムを紹介します。
複数の結果があるメソッドの戻り値としてenumを使った場合の例です。

ファイル名:Program.cs
using System;

class Program
{
    // メソッドの戻り値列挙型
    public enum SimulationMethodResults
    {
        Success,
        Fail,
        Skip
    }
        
    public static void Main()
    {
        // メソッドから結果を取得
        SimulationMethodResults result = SimulationMethod();
        // 結果を表示
        Console.WriteLine(string.Format("result = {0}", result));

        // キー入力待ち
        System.Console.ReadKey();
    }
    
    // 結果を返す仮のメソッド
    public static SimulationMethodResults SimulationMethod()
    {
        return SimulationMethodResults.Success;
    }
}
ファイル名:Compile.bat
C:¥Windows¥Microsoft.NET¥Framework¥v4.0.30319¥csc.exe *.cs
pause

ファイルを作成できたらCompile.batを実行してみましょう。
同じフォルダにProgram.exeが作成されます。
Program.exeを実行して「Program.exe 実行結果」のように表示されたら成功です。

Program.exe 実行結果
result = Success

enumの型変換

enumは数値として管理されています。
定義時に特に指定がない場合、上から0、1、2・・・と連番が振られます。
enumの各値の後ろに"= 数字"を付けることで任意の数値として管理するこも可能です。

使用例
    public enum Colors
    {
        red = 1,
        blue = 2,
        green = 3,
        yellow = 4
    }

ToString()するとenumの名称を文字列で返します。
(int)を付けることでint型に変換することができます。

使用例
        Console.WriteLine(string.Format("red.ToString = {0}", Colors.red.ToString()));
        // → red.ToString = red
        Console.WriteLine(string.Format("(int)red = {0}", (int)Colors.red));
        // → (int)red = 1

数値に(列挙型名)を付けることで、enumに変換するこができます。
変換できるかどうかは、Enum.EsDefined(typeof(列挙型名), 数値)で調べることができます。

使用例
        if (Enum.IsDefined(typeof(Colors), 4))  // → trueになる
        {
            Colors color = (Colors)4;
            Console.WriteLine(string.Format("(Colors)4 = {0}", color));
            // → (Colors)4 = yellow
        }
        if (!Enum.IsDefined(typeof(Colors), 5))  // → IsDefinedの結果はfalseになる
        {
            Console.WriteLine("5はColorsに含まれません");
        }

Enum.GetNames(typeof(列挙型名))で列挙側の各値の名称を取得、Enum.GetValues(typeof(列挙型名))で各値の数値を取得できます。

使用例
        foreach (string name in Enum.GetNames(typeof(Colors)))
        {
            Console.WriteLine(string.Format("Color Name = {0}", name));
        }
        foreach (int value in Enum.GetValues(typeof(Colors)))
        {
            Console.WriteLine(string.Format("Color Value = {0}", value));
        }

まとめたサンプルプログラムをご紹介します。

ファイル名:Program.cs
using System;

class Program
{
    public enum Colors
    {
        red = 1,
        blue = 2,
        green = 3,
        yellow = 4
    }
        
    public static void Main()
    {
        Console.WriteLine(string.Format("red = {0}", Colors.red));
        Console.WriteLine(string.Format("red.ToString = {0}", Colors.red.ToString()));
        Console.WriteLine(string.Format("(int)red = {0}", (int)Colors.red));
        
        if (Enum.IsDefined(typeof(Colors), 4))
        {
            Colors color = (Colors)4;
            Console.WriteLine(string.Format("(Colors)4 = {0}", color));
        }
        if (!Enum.IsDefined(typeof(Colors), 5))
        {
            Console.WriteLine("5はColorsに含まれません");
        }
        
        foreach (string name in Enum.GetNames(typeof(Colors)))
        {
            Console.WriteLine(string.Format("Color Name = {0}", name));
        }
        foreach (int value in Enum.GetValues(typeof(Colors)))
        {
            Console.WriteLine(string.Format("Color Value = {0}", value));
        }

        // キー入力待ち
        System.Console.ReadKey();
    }
}

前述と同じように同フォルダにCompile.batも用意して実行、Program.exeを実行してみてください。
「Program.exe 実行結果」のように表示されます。

Program.exe 実行結果
red = red
red.ToString = red
(int)red = 1
(Colors)4 = yellow
5はColorsに含まれません
Color Name = red
Color Name = blue
Color Name = green
Color Name = yellow
Color Value = 1
Color Value = 2
Color Value = 3
Color Value = 4