カテゴリ: C# 更新日: 2026/06/03

C#の列挙型(enum)とは?定義方法と活用例を初心者向けに解説

C#の列挙型(enum)とは?定義方法と活用例を初心者向けに解説
C#の列挙型(enum)とは?定義方法と活用例を初心者向けに解説

先生と生徒の会話形式で理解しよう

生徒

「C#で何かの状態や種類を分かりやすく管理する方法ってありますか?」

先生

「ありますよ!そういうときには列挙型(enum)を使うと便利です。」

生徒

「列挙型?なんだか難しそうですね……」

先生

「大丈夫!とてもシンプルで、未経験者でもすぐに理解できます。では順番に説明していきましょう。」

1. 列挙型(enum)とは?

1. 列挙型(enum)とは?
1. 列挙型(enum)とは?

列挙型(enum)とは、関連するいくつかの値に「わかりやすい名前」をつけてまとめて管理するための仕組みです。たとえば、曜日(Monday, Tuesday, ...)や信号の色(Red, Yellow, Green)など、決まった選択肢の中から状態を表したいときにとても役立ちます。

プログラムでは状態を数字で管理することもできますが、「1が赤なのか?」「2が黄色なのか?」といったように、数字のままでは意味が伝わりにくく間違いの原因にもなりがちです。そこでenumを使うことで、人が読んで理解しやすい形で状態を表現できるようになります。

初心者にもわかりやすいように、簡単な例を見てみましょう。


// 信号の色を扱うための列挙型
enum SignalColor
{
    Red,
    Yellow,
    Green
}

このように定義しておけば、SignalColor.Redのように名前で状態を扱えるため、コードが格段に読みやすくなります。プログラムを書き始めたばかりの人でも「これは何の色を表しているんだろう?」と迷いにくくなり、バグの防止にもつながる便利な仕組みです。

2. 列挙型を使わないとどうなる?

2. 列挙型を使わないとどうなる?
2. 列挙型を使わないとどうなる?

まずは、列挙型を使わずに「数字だけ」で状態を管理した場合を考えてみましょう。例えば、交通信号の色を数値で表現すると、次のようなコードになります。


int signal = 1;

if (signal == 1)
{
    Console.WriteLine("赤信号です");
}
else if (signal == 2)
{
    Console.WriteLine("黄色信号です");
}
else if (signal == 3)
{
    Console.WriteLine("青信号です");
}

一見すると動きそうですが、「1が赤」「2が黄色」「3が青」という対応を、書いた本人が覚えておく必要があります。あとからコードを読んだ人が見ても、「1って何の状態だっけ?」と考えないと意味が分かりません。

さらに、別の場所でも同じようにif (signal == 1)と書いていると、どこか1カ所でも数字を間違えただけで、まったく違う動作をしてしまいます。このような「意味の分からない数字」はマジックナンバーと呼ばれ、バグの原因になりやすい書き方です。こうした問題を避けるために、名前で状態を表現できる列挙型(enum)が役に立ちます。

3. 列挙型の基本的な定義方法

3. 列挙型の基本的な定義方法
3. 列挙型の基本的な定義方法

C#で列挙型を定義するときは、enumというキーワードを使います。クラスやメソッドと同じように、「名前」と「中身」をセットで書いていきます。まずは、交通信号の色を表すシンプルな列挙型を例にしてみましょう。


// 信号の色を表す列挙型の定義
enum SignalColor
{
    Red,    // 赤
    Yellow, // 黄
    Green   // 青
}

enum SignalColor { ... }という形で、「SignalColor」という新しい型を自分で作っています。その中にRedYellowGreenといった、あらかじめ決めておきたい状態を並べていくイメージです。曜日や会員ランクなども、同じように並べて定義できます。

定義した列挙型は、通常の変数と同じように使えます。たとえば、今の信号の色を表す変数を作る場合は次のように書きます。


SignalColor current = SignalColor.Red;

このように書いておくと、「currentには赤信号が入っているんだな」と、コードを読む人にもすぐに伝わります。int current = 1;のように数字で書くよりも、意味がはっきりしていて間違いも起きにくくなります。次の章では、この列挙型を実際のプログラムの中でどのように使うかを見ていきます。

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

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

先ほどの交通信号の例をenumを使って書き直してみましょう。


using System;

enum SignalColor
{
    Red,
    Yellow,
    Green
}

class Program
{
    static void Main()
    {
        SignalColor signal = SignalColor.Red;

        if (signal == SignalColor.Red)
        {
            Console.WriteLine("赤信号です。止まってください。");
        }
        else if (signal == SignalColor.Yellow)
        {
            Console.WriteLine("黄色信号です。注意してください。");
        }
        else if (signal == SignalColor.Green)
        {
            Console.WriteLine("青信号です。進んでください。");
        }
    }
}

赤信号です。止まってください。

このようにenumを使うと、コードが読みやすくなり、何の値を扱っているかがひと目でわかるようになります。

5. enumの内部的な仕組み

5. enumの内部的な仕組み
5. enumの内部的な仕組み

enumは、内部的には整数(int)で管理されています。先ほどのSignalColorでは、次のような対応になっています。

  • SignalColor.Red → 0
  • SignalColor.Yellow → 1
  • SignalColor.Green → 2

もし数字を指定したい場合は、次のように書くこともできます。


enum SignalColor
{
    Red = 10,
    Yellow = 20,
    Green = 30
}

6. enumの活用例:ユーザーの権限レベル

6. enumの活用例:ユーザーの権限レベル
6. enumの活用例:ユーザーの権限レベル

enumは状態以外にも、「役割」や「カテゴリ分け」にも使えます。例えば、ユーザーの種類を管理する場合も便利です。


enum UserRole
{
    Guest,
    Member,
    Admin
}

このようにすれば、ユーザーの役割に応じた処理をわかりやすく記述できます。


UserRole role = UserRole.Admin;

if (role == UserRole.Admin)
{
    Console.WriteLine("管理者ページにアクセス可能です。");
}

7. enumの値を文字列として表示する

7. enumの値を文字列として表示する
7. enumの値を文字列として表示する

enumの値を画面に表示したい場合、ToString()メソッドを使えば、名前(文字列)として取り出せます。


SignalColor signal = SignalColor.Green;
Console.WriteLine(signal.ToString());

Green

これにより、enumの値を画面やログに出力するのも簡単です。

8. 数値からenumに変換する

8. 数値からenumに変換する
8. 数値からenumに変換する

数値からenumの値に変換したい場合は、(Enum名)数字の形でキャストします。


int num = 1;
SignalColor color = (SignalColor)num;
Console.WriteLine(color);

Yellow

ただし、定義されていない数値を指定すると想定外の動作になる可能性があるので注意しましょう。

まとめ

まとめ
まとめ

C#の列挙型は、状態や種類を直感的に表現できる便利な仕組みです。曜日、権限、信号、ゲームのキャラクター状態など、プログラムの中で選択肢が限られている場面はたくさんあります。そうした場面で数値や文字列を使って管理すると、後から読む人にとって意味が分かりにくくなり、修正のたびに「この数字は何を表しているのだろう」と迷ってしまいます。列挙型を使えば、コードの中に意図がそのまま表れ、読みやすさが大きく変わります。未経験の人でも扱いやすく、開発経験が短い人でも自然に使いこなせるという点も魅力です。

さらに、列挙型は内部的に数値で管理されているため、必要に応じて任意の番号を指定できます。データベースや外部システムと連携する場面では、この特徴が役立ちます。また、ToString()を使って文字列として表示することもできるので、画面への出力やログ保存にも向いています。形式的な特徴を覚えるだけではなく、「どんな場面で使うと嬉しいのか」を意識して触れていくと、理解が深まり、自然と活用できるようになります。

以下に、今回学んだ知識を活かした少し応用的なサンプルプログラムを用意しました。列挙型とswitch文を組み合わせることで、より読みやすく、分岐が整理された書き方になります。もしこれまでif文で複雑な条件を並べていた人は、ぜひ試してみてください。

列挙型とswitch文を使った応用サンプル


using System;

enum WeatherType
{
    Sunny,
    Cloudy,
    Rainy,
    Snowy
}

class Program
{
    static void Main()
    {
        WeatherType today = WeatherType.Snowy;

        switch (today)
        {
            case WeatherType.Sunny:
                Console.WriteLine("今日は晴れです。洗濯物がよく乾きます。");
                break;

            case WeatherType.Cloudy:
                Console.WriteLine("今日は曇りです。少し肌寒いかもしれません。");
                break;

            case WeatherType.Rainy:
                Console.WriteLine("今日は雨です。傘を忘れないようにしましょう。");
                break;

            case WeatherType.Snowy:
                Console.WriteLine("今日は雪です。足元に気をつけてください。");
                break;
        }
    }
}

列挙型を使うと、コードの意味が自然に読み取れます。「雪」という選択肢がWeatherType.Snowyとしてそのまま記述されているため、英単語が苦手な人でも感覚的に理解できます。もし値を数字で管理していたなら、「3が雪」という表現になりますが、これでは判断できません。こうした読みやすさの違いは小さなことのように見えて、長期の開発や他の人との共同作業で大きな力になります。

列挙型が役に立つ場面は、実際の開発では驚くほど多く登場します。ログイン状態、処理ステップの進行状況、画面の種類、商品のサイズ、決済方法、会員ランク、アプリのテーマカラーといった形で、さまざまなものを整理して表現できます。一見単純な仕組みに見えますが、使い方次第でコードの見通しが大きく改善されます。他の言語にも同じ考え方がありますので、プログラミングに慣れてきたときに「こういうときに使うのだな」と思い出せると、自然と活用の幅が広がるはずです。

今回の例に登場したSignalColorやUserRoleのように、用途が明確な名前を付けると読みやすさが増します。特に複数人で仕事をするときや、数か月後に自分で読み返すときに効果を強く感じます。「なぜこの数字が3なのか」「どの場面で1が使われていたのか」などと考えなくて済むため、時間の節約にもつながります。小さな工夫の積み重ねが、プログラム全体の品質や保守しやすさを左右するという点は、多くの開発者が意識している部分です。

C#に触れたばかりの人でも、列挙型を使った書き方に慣れておくと、クラスやメソッドの設計も分かりやすく整理できます。「状態」や「種類」を日本語と同じ感覚で表現できるため、自然な形で理解できることも魅力のひとつです。今後、条件分岐やデータ管理が必要な場面と出会ったときには、ぜひ一度列挙型で整理できないか考えてみてください。

先生と生徒の振り返り会話

生徒

「列挙型って思ったより便利なんですね。数字だけで管理していたときと全然違いました。」

先生

「そうですね。読みやすさと整理しやすさが大きな特徴です。状態や種類を自然な名前で扱えると、ミスも減ります。」

生徒

「switch文と組み合わせると、さらに見やすくなると感じました。if文で長く書いていたものが、すっきりしますね。」

先生

「そのとおりです。列挙型は、実際の開発でもよく使われています。曜日、画面、権限、エラー種別など、身近なところにたくさんありますよ。」

生徒

「これから書くプログラムでも、状態を数字で書かずに列挙型で整理してみます。読み返しやすいコードを目指してみます!」

先生

「とても良い心がけです。慣れると自然に使えるようになりますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

C#の列挙型(enum)とは何ですか?初心者向けに簡単に教えてください。

C#の列挙型(enum)とは、曜日や信号の色のように限られた選択肢を名前でわかりやすく表現できる機能です。状態や種類を数字ではなく名前で扱えるので、コードが読みやすくなります。

C#のenumはどうやって定義しますか?書き方を教えてください。

C#でenumを定義するには、「enum」というキーワードを使い、波カッコの中に値をカンマで区切って書きます。たとえば「enum SignalColor { Red, Yellow, Green }」のように書きます。
カテゴリの一覧へ
新着記事
New1
COBOL
COBOLのPERFORM WITH TEST AFTERの使い方を完全ガイド!初心者でもわかる繰り返し処理の基本
New2
COBOL
COBOLのPERFORM WITH TEST BEFOREの使い方を完全ガイド!初心者向けループ処理の基本
New3
C#
C#のASP.NETでCORSを設定する方法を完全解説!エラー解決とWebアプリ開発初心者向けガイド
New4
Azure
Azure WAFポリシーの作成と管理を徹底解説!複数リソースで共有する設定術
人気記事
No.1
Java&Spring記事人気No1
C#
C#のstaticクラスとstaticメソッドの基本と使い方をやさしく解説!
No.2
Java&Spring記事人気No2
Azure
Azure SQL Database購入モデル比較!vCoreとDTUの違いと選び方を初心者向けに解説
No.3
Java&Spring記事人気No3
C#
C#のbool型を完全解説!初心者でもわかるtrueとfalseの基本と使い方
No.4
Java&Spring記事人気No4
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.5
Java&Spring記事人気No5
C#
C#のWPFとは?XAMLでGUI開発を基礎から完全解説!初心者向けの入門ガイド
No.6
Java&Spring記事人気No6
Azure
Azureストレージの冗長性比較!LRS/GRS/ZRSの選び方とコストの最適解を完全解説
No.7
Java&Spring記事人気No7
C#
C#のイベント処理を完全攻略!WinFormsとWPFの基本を解説
No.8
Java&Spring記事人気No8
C#
C#の文字列を数値に変換する方法(int.Parse・TryParse)をわかりやすく解説!