C#

C# | 列挙型の使い方を徹底解説

2024年5月10日

本ページはプロモーションが含まれています

C#列挙型アイキャッチ画像

列挙型(Enum)は、特定の整数値に名前を付けたり、グループ化したりするための型です。

以下は、列挙型の定義と使用例です。

using System;

public enum 曜日
{
    月曜日,
    火曜日,
    水曜日,
    木曜日,
    金曜日,
    土曜日,
    日曜日
}

public class プログラム
{
    public static void メイン()
    {
        // 列挙型の使用例
        曜日 今日 = 曜日.水曜日;
        
        Console.WriteLine($"今日は {今日} です");
        
        if (今日 == 曜日.水曜日)
        {
            Console.WriteLine("週の真ん中ですね!");
        }
    }
}

実行結果

今日は 水曜日 です
週の真ん中ですね!

列挙型の主な疑問や問題点を挙げてみます。

  • 列挙型へのアクセス方法は?
  • 列挙型のデフォルト値は何か?
  • 列挙型と整数型の間でどのように変換するのか?
  • 列挙型の値から名前を取得する方法は?
  • 列挙型の基になる型を変更する方法は?
  • 列挙型の使いどころは?

この記事ではこれらについても詳しく解説します。

列挙型の基本概念

列挙体(Enum)は、特定の数値に名前を付けたものの集合体です。

列挙体を使用すると、特定の値(定数)のセットを簡潔に定義し、それぞれの値に意味のある名前を付けることができます。

列挙型の定義方法

以下の例では、Status という名前の列挙型が定義されています。
列挙型内の各要素は、デフォルトで0から始まります。
つまり、Active は0、Inactive は1、Pending は2に割り当てられます。

enum Status : int 
{
    Active = 0,     // 0
    Inactive = 1,   // 1
    Pending = 2     // 2
}

コードの解説

  • 列挙型の定義Status という名前の列挙型を int 型で定義。
  • 列挙値の割り当てActive, Inactive, Pending という名前の定数にそれぞれ整数値 0, 1, 2 を割り当てる。
  • 使用方法: コード内でこれらの名前付き定数を使って状態を表現し、比較や条件分岐に利用する。

以下のように列挙体データ型列挙子の値省略して記述することができます。

enum Status 
{
    Active,     // 0
    Inactive,   // 1
    Pending     // 2
}

以下のようにActive に1、Inactive に2、Pending に3のように任意の値を割り当てることもできます。

enum Status
{
    Active = 1,
    Inactive = 2,
    Pending = 3
}

列挙型の値へのアクセス方法

C#の列挙型(enum)の値へのアクセス方法について、コード例を交えて説明します。

まず、基本的な列挙型を定義します。

using System;

public enum Colors
{
    Red,
    Green,
    Blue
}

public class Program
{
    public static void Main()
    {
   //ここに以下の処理を記述する
    }
}

以下はアクセス方法です。

列挙型の値から名前を取得する

Enum.GetName(typeof(Colors), value) メソッドを使用して、整数値 1 から列挙型 Colors の名前を取得します。

int value = 1; // 取得したい整数値
        
// 列挙型の値から名前を取得
string colorName = Enum.GetName(typeof(Colors), value);
Console.WriteLine(colorName); 

// 出力: Red

列挙型の名前から値を取得する

Enum.TryParse メソッドを使用して、文字列 name を列挙型 Colors の値に変換します。
このメソッドは変換が成功した場合に true を返し、失敗した場合は false を返します。

string name = "Green"; // 取得したい名前
        
// 名前から列挙型の値を取得
if (Enum.TryParse(name, out Colors color))
{
    int value = (int)color;
    Console.WriteLine(value); 
}
else
{
    Console.WriteLine("無効な名前です");
}

// 出力: 2

列挙型のすべての値を取得する

Enum.GetValues(typeof(Colors)) メソッドで、Colors 列挙型のすべての値を取得します。
これにより Red, Green, Blue の列挙型の値を含む配列が得られます。

// 列挙型のすべての値を取得
Array values = Enum.GetValues(typeof(Colors));

foreach (Colors color in values)
{
     // 数値だけ出力
     Console.WriteLine((int)color);
}

// 出力:
// 0
// 1
// 2

列挙型のすべての名前を取得する

Enum.GetNames(typeof(Colors)) メソッドを使用して、Colors 列挙型のすべての名前を取得します。
このメソッドは列挙型の名前の配列(string[])を返します。

// 列挙型のすべての名前を取得
string[] names = Enum.GetNames(typeof(Colors));

foreach (string name in names)
{
     // 名前を出力
     Console.WriteLine(name);
}

//出力:
//Red
//Green
//Blue

列挙型のデフォルト値は何か?

C#の列挙型のデフォルト値は、その列挙型で定義された最初のメンバーです。

列挙型のメンバーは整数値で表され、最初のメンバーは0から始まります(明示的に別の値を設定しない限り)。

enum Color
{
    Red,    // 0
    Green,  // 1
    Blue    // 2
}

class Program
{
    static void Main()
    {
        // デフォルト値はRed(最初のメンバー)
        Color defaultColor = default(Color);
        Console.WriteLine(defaultColor); // 出力: Red
    }
}

列挙型(enum)と整数型の間で変換する方法

列挙型 → 整数に変換する方法

列挙型の値を整数に変換するには、キャストを使用します。

enum Color
{
    Red,    // 0
    Green,  // 1
    Blue    // 2
}

class Program
{
    static void Main()
    {
        Color color = Color.Green;
        
        // 列挙型を整数にキャスト
        int colorValue = (int)color;
        
        Console.WriteLine(colorValue); // 出力: 1
    }
}

整数列挙型に変換する方法

整数値を列挙型の値に変換するには、キャストを使用します。

enum Color
{
    Red,    // 0
    Green,  // 1
    Blue    // 2
}

class Program
{
    static void Main()
    {
        int colorValue = 2;
        
        // 整数を列挙型にキャスト
        Color color = (Color)colorValue;
        
        Console.WriteLine(color); // 出力: Blue
    }
}

列挙型の値から名前を取得する方法

列挙型の値から名前を取得する方法で、具体的に 0 から Red を取得したい場合、Enum.GetName メソッドが役立ちます。

以下のコードはその方法を示しています。

using System;

public enum Colors
{
    Red,
    Green,
    Blue
}

public class Program
{
    public static void Main()
    {
        int value = 0; // 取得したい値
        
        // 列挙型の値から名前を取得
        string colorName = Enum.GetName(typeof(Colors), value);
        
        Console.WriteLine(colorName); // 出力: Red
    }
}

列挙型の基になる型を変更する方法

デフォルトでは、列挙型の基になる型は int ですが、他の整数型(byte, sbyte, short, ushort, uint, long, ulong)に変更することが可能です。

列挙型の基になる型を指定する方法

列挙型の定義の際に、コロン : を使って基になる型を指定します。

// 基になる型をbyteに変更
enum Color : byte
{
    Red,    // 0
    Green,  // 1
    Blue    // 2
}

// 基になる型をshortに変更
enum Status : short
{
    Pending,    // 0
    Approved,   // 1
    Rejected    // 2
}

列挙型(enum)の使いどころ

列挙型(enum)は、プログラム内で一連の定数を定義するための便利な方法です。
以下は、列挙型が使われる一般的な場面です。

  1. UI設定
    アプリケーションのUI設定(例:テーマ、言語)を表すために使用されます。列挙型を使用することで、設定オプションを明確に定義し、UIの一貫性を確保できます。
  2. 状態管理
    ゲーム開発において、キャラクターの状態(例:待機、移動、攻撃)やアイテムの状態(例:未使用、使用中、使用済み)を表すために使用されます。
  3. ファイル操作
    ファイルの読み込みや書き込み中に発生する状態(例:ファイルがオープン中、読み込み中、書き込み中、クローズ中)を管理するために使用されます。
  4. エラーコード
    エラーコードの管理に使用され、プログラムが特定のエラーの状態を正確に報告できるようにします。
  5. 日付と時間の操作
    曜日や月の名前を表すために使用されます。例えば、月の名前を列挙型で表現することで、月の名前を英語や他の言語に簡単に切り替えることができます。

まとめ

  • 列挙型のメンバーにアクセスするには、列挙型名とメンバー名をドット(.)で繋げる。
  • 列挙型のデフォルト値は、その列挙型で定義された最初のメンバー。
  • 列挙型の値から名前を取得する方法はEnum.GetNameメソッドを使用
  • 列挙型の定義時にコロン(:)を使って基になる型を指定する。

Follow me!

-C#
-,

PAGE TOP