C#の列挙型(enum)とは?定義方法と活用例を初心者向けに解説
生徒
「C#で何かの状態や種類を分かりやすく管理する方法ってありますか?」
先生
「ありますよ!そういうときには列挙型(enum)を使うと便利です。」
生徒
「列挙型?なんだか難しそうですね……」
先生
「大丈夫!とてもシンプルで、未経験者でもすぐに理解できます。では順番に説明していきましょう。」
1. 列挙型(enum)とは?
列挙型(enum)とは、関連する値をひとつにまとめて管理するための型です。たとえば、曜日(Monday, Tuesday, ...)や信号の色(Red, Yellow, Green)など、「限られた選択肢の中から1つを選ぶ」ような場合に便利です。
プログラムで何かの「状態」や「種類」を使い分けたいとき、数字で管理すると分かりにくくなります。そこでenumを使うと、名前で分かりやすく扱えるようになります。
2. 列挙型を使わないとどうなる?
例えば、交通信号の色を数字で管理すると、次のようになります。
int signal = 1;
if (signal == 1)
{
Console.WriteLine("赤信号です");
}
これでは、1が赤なのか、2が青なのか、プログラムを読んだだけではわかりません。
3. 列挙型の基本的な定義方法
C#では、列挙型をenum
キーワードを使って定義します。以下が基本形です。
enum SignalColor
{
Red,
Yellow,
Green
}
このように書くと、SignalColor.Red
やSignalColor.Green
のように、名前付きで状態を使えるようになります。
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の内部的な仕組み
enumは、内部的には整数(int)で管理されています。先ほどのSignalColor
では、次のような対応になっています。
- SignalColor.Red → 0
- SignalColor.Yellow → 1
- SignalColor.Green → 2
もし数字を指定したい場合は、次のように書くこともできます。
enum SignalColor
{
Red = 10,
Yellow = 20,
Green = 30
}
6. enumの活用例:ユーザーの権限レベル
enumは状態以外にも、「役割」や「カテゴリ分け」にも使えます。例えば、ユーザーの種類を管理する場合も便利です。
enum UserRole
{
Guest,
Member,
Admin
}
このようにすれば、ユーザーの役割に応じた処理をわかりやすく記述できます。
UserRole role = UserRole.Admin;
if (role == UserRole.Admin)
{
Console.WriteLine("管理者ページにアクセス可能です。");
}
7. enumの値を文字列として表示する
enumの値を画面に表示したい場合、ToString()
メソッドを使えば、名前(文字列)として取り出せます。
SignalColor signal = SignalColor.Green;
Console.WriteLine(signal.ToString());
Green
これにより、enumの値を画面やログに出力するのも簡単です。
8. 数値からenumに変換する
数値からenumの値に変換したい場合は、(Enum名)数字
の形でキャストします。
int num = 1;
SignalColor color = (SignalColor)num;
Console.WriteLine(color);
Yellow
ただし、定義されていない数値を指定すると想定外の動作になる可能性があるので注意しましょう。