C# enum完全ガイド|基本定義から型指定・文字列変換・命名規則・使いどころまで徹底解説のカバー画像

C# enum完全ガイド|基本定義から型指定・文字列変換・命名規則・使いどころまで徹底解説

公開日:2025/05/03最終更新日:2025/05/03

C#のプログラミングにおいて、特定の値のセットを扱いたいことはよくあります。


曜日、色、ステータスコードといった、限られた値を取るデータを効率的に管理するには、enumを使うのが便利です。enumを活用することで、関連する定数群に意味のある名前を付けてコードの意図を明確にできます。


この記事では、C#のenumについて、基本的な概念から具体的な使い方、数値(int)や文字列(string)との変換方法、要素数の取得といった応用テクニック、そして効果的な「使いどころ」や「命名規則」に至るまで、網羅的に解説します。

1.C#のenum(列挙型)とは?

まずはC#のenumについて基本概念や使いどころを紹介します。


C#のenum(列挙型)がどのようなもので、どのような場面で利用されているのか押さえておきましょう。

C# enumの基本概念

C#のenum(列挙型)は、関連する定数の集合を定義するためのデータ型です。


例えば、プログラム内で信号の色「赤」「黄」「青」を扱う場合、それぞれを数値の 0, 1, 2 で表現する代わりに、SignalColor というenumを定義し、Red, Yellow, Blue という名前で扱えるようにします。

enum SignalColor{ Red, Yellow, Blue  }

これにより、コードを読む際に 0 や 1 といった数値が何を表しているのかを推測する必要がなくなり、「SignalColor.Red」のように、その値が何を意味するのかが一目で理解できるようになります。このように、enumを使用することで、コードの可読性や保守性の向上につながります。


enumは、内部的には整数型(デフォルトではint)として扱われますが、定義された名前を使用して値を参照することができます。これにより、コードの意味が明確になり、誤った値の操作を防げる点が大きな特徴です。

C# enumの使いどころ

enumの主な使いどころは以下のとおりです。

  • 状態管理:アプリケーションの状態(例:Active、Inactive、Suspendedなど)を表現する。

  • 固定値の管理:曜日や月、方向(例:North、South、East、West)などの固定値を扱う。

  • 設定値やオプションの分類: 特定の機能に関する設定オプションや、処理のモードなどを分類する

  • 権限レベル: ユーザーのアクセス権限レベル(Admin, Editor, Viewerなど)を定義する

このように、enumは意味のある名前で分類・管理したい定数群がある場面で使われます。

2.C#enumの基本的な使い方

この章ではenumの具体的な使い方を紹介します。


C#でenumをどのように定義し、コード内で利用するのか、そして基底となるデータ型を指定する方法や、推奨される命名規則について解説します。

C# enumの定義方法

C#でenumを定義するには、enumキーワードを使用します。基本的な構文は以下の通りです。

enum EnumTypeName

{

    MemberName1, // 内部的な値は 0

    MemberName2, // 内部的な値は 1

    MemberName3  // 内部的な値は 2

    // ... 必要に応じてメンバーを追加

}

  • EnumTypeName: 定義するenumの型名を指定します(例: SignalColor, OrderStatus)。

  • MemberName1, MemberName2, ...: enumに含まれるメンバー(定数)の名前を指定します(例: Red, Yellow, Blue)。

  • 各メンバーには、デフォルトで int 型の数値が 0 から順に自動的に割り当てられます。

特定の数値を明示的に割り当てたい場合は、以下のように記述します。

enum ErrorCode

{

    None = 0,

    FileNotFound = 101,

    AccessDenied = 102,

    Unknown = 999 // 順序通りでなくても、重複しなければOK

}

C# enumの型指定の方法

デフォルトでは、enumの基礎となる型はintですが、他の整数型(byte、short、long)を指定することもできます。


型指定は以下のように行います。

enum Colors : byte

{

    Red = 1,

    Yellow = 2,

    Blue,  // 自動的に3になる

    White, // 自動的に4になる

    Black = 100

}

指定できる基底型は、byte, sbyte, short, ushort, int (デフォルト), uint, long, ulong のいずれかの整数型です。char は指定できません。基底型を変更した場合、その型の範囲を超える値をメンバーに割り当てることはできません。

C# enumの命名規則

C# enumの命名規則は以下の通りです。

  • enum名は名詞または名詞句を使用し、PascalCase(先頭大文字)で記述

  • 単数形を使用(例:Color、DayOfWeek)

  • 列挙子(enum値)も同様にPascalCaseで記述

  • 接頭辞や接尾辞(Enum、Flags)は避ける

これらの命名規則を守ることで、コードの可読性が向上し、他の開発者が理解しやすくなります。


関連記事

C#とは?基本文法や特徴、メリット、開発分野まで初心者に必要な情報をわかりやすく解説

3.C# enumと数値(int)の相互変換

enumは内部的に数値を持っていますが、そのままでは数値として扱えません。実際の開発では、enumの値をデータベースに保存したり、外部システムと連携したりするときに、基底となる数値と相互に変換する必要があります。


この章では、enumメンバーを数値に変換する方法、および数値をenumメンバーに変換する方法について、キャストを用いた基本的な操作を中心に解説します。

C# enum値からint型への変換

C#では、enumの値をint型に変換できます。これは、enumが内部的に整数型として扱われているためです。


enum型の変数やメンバーが持つ内部的な数値を取得するには、基底となる数値型への明示的なキャストを行います。

enum DaysOfWeek

{

    Sunday,    // 0

    Monday,    // 1

    Tuesday,   // 2

    Wednesday, // 3

    Thursday,  // 4

    Friday,    // 5

    Saturday   // 6

}


class Program

{

    static void Main()

    {

        DaysOfWeek today = DaysOfWeek.Monday;

        int dayValue = (int)today; // enum値をint型にキャスト

        Console.WriteLine(dayValue); // 出力: 1

    }

}

この例では、DaysOfWeek.Mondayをint型にキャストして、その値(1)を取得しています。


enum値からint型に変換することで、enumの値をデータベースに保存したり、数値として計算に利用したりできます。

C# int型からenum値への変換

int型からenum値への変換も同様に、キャスト演算子を使用します。キャスト演算子 () の中に、変換先のenum型名を指定します。

enum DaysOfWeek

{

    Sunday,    // 0

    Monday,    // 1

    Tuesday,   // 2

    Wednesday, // 3

    Thursday,  // 4

    Friday,    // 5

    Saturday   // 6

}


class Program

{

    static void Main()

    {

        int dayValue = 2;

        DaysOfWeek day = (DaysOfWeek)dayValue; // int型をenum値にキャスト

        Console.WriteLine(day); // 出力: Tuesday

    }

}

この例では、整数値2をDaysOfWeek型にキャストして、その値(Tuesday)を取得しています。


ただし、指定した整数値に対応するenum値が存在しない場合でも例外は発生せず、その整数値がそのままenum値として扱われるため注意が必要です。


外部から受け取った数値をenumに変換するときは、Enum.IsDefined()メソッドなどを用いてその数値がenumの有効なメンバーに対応するかどうかを検証することが推奨されています。

C# enum値からint型をキャストなしで扱う方法

キャストを使わずにenum値からint値を取得するには、Enum.ToObject()メソッドを使用する方法があります。

enum Priority

{

    Low,    // 0

    Normal, // 1

    High    // 2

}


class Program

{

    static void Main()

    {

        int priorityCode = 0;

        object enumObject = Enum.ToObject(typeof(Priority), priorityCode); // 数値からobjectへ

        Priority priority = (Priority)enumObject; // objectからenumへキャスト

        Console.WriteLine($"Enum.ToObject: {priority}"); // 出力: Enum.ToObject: Low

    }

}

Enum.ToObjectメソッドは、指定された数値に対応するenumメンバーを object 型として返します。


また、System.Convert クラスを使う方法もあります。

enum DaysOfWeek

{

    Sunday,    // 0

    Monday,    // 1

    Tuesday,   // 2

    Wednesday, // 3

    Thursday,  // 4

    Friday,    // 5

    Saturday   // 6

}


class Program

{

    static void Main()

    {

        DaysOfWeek today = DaysOfWeek.Wednesday;

        int dayValue = Convert.ToInt32(today); // Convertクラスを使用して変換

        Console.WriteLine(dayValue); // 出力: 3

    }

}

Convertクラスには、様々な型への変換メソッドが用意されており、enumと数値の相互変換にも使用できます。


関連記事

C#演算子完全ガイド:比較・Nullの基礎からオーバーロード・優先順位などの応用まで徹底解説

4.C# enumと文字列(string)の紐づけと変換方法

enumの値をログに出力したり、ユーザーインターフェースに表示したり、設定ファイルから読み込んだりするときなど、enumメンバーの名前とenumの値とを紐づけたいときもあります。


この章では、enumの値に表示用の文字列を紐づける方法を紹介します。

C# enum値から文字列への変換

enumの値を文字列に変換する最も簡単な方法は、ToStringメソッドを使用することです。このメソッドは、enumの値をその名前に対応する文字列として返します。

Days day = Days.Monday;

string dayName = day.ToString(); // "Monday"が取得される

また、Enum.GetName()メソッドを使用することもできます。

Enum.GetName() メソッドは、enumの型とメンバーの値を指定してそのメンバー名を取得します。特定の数値に対応する名前を取得したい場合などに利用できます。

string dayName = Enum.GetName(typeof(Days), Days.Monday); // "Monday"

C# enumで名前から値を取得

名前(文字列)からenum値に変換するには、Enum.Parse()メソッドを使用します。このメソッドは、指定された文字列がenumの名前と一致している場合にその値を返します。

string dayName = "Monday";

Days day = (Days)Enum.Parse(typeof(Days), dayName);

大文字小文字を区別せずに変換したい場合は、第3引数にtrueを指定します。

string dayName = "monday";

Days day = (Days)Enum.Parse(typeof(Days), dayName, true);

なお、Enum.Parseは文字列がenumの名前と一致していない場合に例外をスローします。そのため、事前に文字列が有効であるかどうかを検証するのがおすすめです。

string inputString = "monday"; // 変換元の文字列

// Enum.TryParse<TEnum> を使用して変換を試みる (大文字小文字は区別しない: true)

if (Enum.TryParse<Days>(inputString, true, out Days parsedDay))

{

    // 変換成功時の処理

    Console.WriteLine($"文字列 '{inputString}' から enum値 {parsedDay} への変換に成功しました。");

}

else

{

    // 変換失敗時の処理

    Console.WriteLine($"文字列 '{inputString}' から Days enum への変換に失敗しました。");

}

この例では、Enum.TryParseを使用して変換を試みて、失敗した場合はエラーメッセージを表示しています。

C# enumに表示用文字列を紐づける方法

enumメンバー名は通常、プログラム内部で分かりやすい英語名が使われますが、UIの表示やレポート出力などでは、日本語の分かりやすい説明やスペースを含む文字列を使いたい場合があります。


このような場合に、enumメンバーにカスタム文字列を「紐づけ」る方法として System.ComponentModel.DescriptionAttribute が利用できます。

using System.ComponentModel;


public enum OrderStatus

{

    [Description("処理待ち")]

    Pending,


    [Description("処理中")]

    Processing,


    [Description("発送済み")]

    Shipped,


    [Description("キャンセル済")]

    Cancelled

}

enumの値からこの DescriptionAttribute の値を取得するためには、ヘルパーメソッドを用意する必要があります。拡張メソッドとして実装すると便利です。

using System;

using System.ComponentModel;

using System.Reflection; // リフレクションに必要


public static class EnumExtensions

{

    public static string GetDescription(this Enum value)

    {

        // enum値からFieldInfoを取得

        FieldInfo fieldInfo = value.GetType().GetField(value.ToString());

        if (fieldInfo == null) return value.ToString(); // フィールド情報が見つからない場合はメンバー名を返す


        // FieldInfoからDescriptionAttributeを取得

        var attribute = (DescriptionAttribute)Attribute.GetCustomAttribute(fieldInfo, typeof(DescriptionAttribute));


        // 属性が存在すればそのDescriptionを、なければメンバー名を返す

        return attribute != null ? attribute.Description : value.ToString();

    }

}

定義した拡張メソッドを使って、enumの値から紐付けられた説明文字列を取得できます。

OrderStatus status = OrderStatus.Processing;

string statusDescription = status.GetDescription(); // 拡張メソッドを呼び出す


Console.WriteLine($"現在の注文ステータス: {statusDescription}"); // 出力: 現在の注文ステータス: 処理中


status = OrderStatus.Shipped;

Console.WriteLine(status.GetDescription()); // 出力: 発送済み

このように DescriptionAttribute を使うことで、enumの定義自体にUI表示などに適した文字列情報を持たせることができ、コードの他の箇所で表示文字列をハードコーディングする必要がなくなります。


関連記事

C# Splitメソッド完全ガイド|複数区切り文字・正規表現・空白削除・最初や最後の要素を取得する方法まで

5.C# enumの要素数と値の取得方法

これまでにenumの基本的な使い方と、数値や文字列との変換方法を見てきました。ここではさらに踏み込んで、enumに関する応用的なテクニックをいくつか紹介します。

C# enumの要素数の取得

C#でenumの要素数を取得するには、主に2つの方法があります。


最も一般的な方法はEnum.GetValuesメソッドを使用する方法です。

public enum Colors

{

    Red,

    Yellow,

    Blue,

    White,

    Black

}


// 要素数を取得

int count = Enum.GetValues(typeof(Colors)).Length;

Console.WriteLine($"要素数: {count}"); // 出力: 要素数: 5

もう一つの方法はEnum.GetNamesメソッドを使用する方法です。

int length = Enum.GetNames(typeof(Colors)).Length;

Console.WriteLine($"要素数: {length}"); // 出力: 要素数: 5

どちらの方法も同じ結果を返しますが、GetNamesメソッドは名前の配列を返し、GetValuesメソッドは値の配列を返すという違いがあります。

すべてのenum値を列挙

enumのすべての値を列挙するには、Enum.GetValuesメソッドを使用して配列を取得し、それをループで処理します。

enum DaysOfWeek

{

    Sunday,

    Monday,

    Tuesday,

    Wednesday,

    Thursday,

    Friday,

    Saturday

}


class Program

{

    static void Main()

    {

        foreach (DaysOfWeek day in Enum.GetValues(typeof(DaysOfWeek)))

        {

            Console.WriteLine(day);

        }

    }

}

このコードの出力は以下のようになります。

Sunday

Monday

Tuesday

Wednesday

Thursday

Friday

Saturday

この方法を使用することで、enumのすべての値を簡単に列挙できます。


関連記事

【C#】Listと配列との違いや初期化・削除・要素数取得・型指定なしの使い方を紹介


C# foreach完全ガイド|基本構文からコレクション操作・LINQ連携・ループ制御まで徹底解説

6. まとめ

本記事では、C#におけるenum(列挙型)について、その基本的な概念や使いどころ、定義方法、基底型の指定、命名規則、数値(int)や文字列(string)との相互変換、要素数やメンバー一覧の取得といった応用的なテクニックまで、網羅的に解説しました。


C#のenumは、状態や固定値を扱うときに便利なデータ型です。enumを適切に使用することで、誤った値の使用を防ぎ、バグの発生を抑えることが可能です。


今回紹介した知識を活用して、より効率的かつ保守性の高いコードを書いていきましょう。


本記事が皆様にとって少しでもお役に立てますと幸いです。


フリーランスボード」は、数多くのフリーランスエージェントが掲載するITフリーランスエンジニア・ITフリーランス向けの案件・求人を一括検索できるサイトです。


開発環境、職種、単価、稼働形態、稼働日数など様々な条件から、あなたに最適なフリーランス案件・求人を簡単に見つけることができます。

単価アップを目指す方や、自分の得意なスキルを活かせる案件に参画したい方は、ぜひ「フリーランスボード」をご利用ください。


自身に最適なフリーランスエージェントを探したい方はこちらよりご確認いただけます。

無料で登録したらスカウトを待つだけ フリーランスの新しい仕事探しを始めよう

フルリモート案件を 無料登録した方限定で配信中

目次

1.C#のenum(列挙型)とは?

C# enumの基本概念

C# enumの使いどころ

2.C#enumの基本的な使い方

C# enumの定義方法

C# enumの型指定の方法

C# enumの命名規則

3.C# enumと数値(int)の相互変換

C# enum値からint型への変換

C# int型からenum値への変換

C# enum値からint型をキャストなしで扱う方法

4.C# enumと文字列(string)の紐づけと変換方法

C# enum値から文字列への変換

C# enumで名前から値を取得

C# enumに表示用文字列を紐づける方法

5.C# enumの要素数と値の取得方法

C# enumの要素数の取得

すべてのenum値を列挙

6. まとめ