Categories: Cシャープ

C#のenum(列挙型)を完全解説!定義から活用例までわかりやすく紹介

C#で開発をしていると、enum(列挙型)を使う場面に出くわすことがよくあります。たとえば曜日や状態、カテゴリなど、意味のある定数の集まりを扱いたいときに非常に便利です。enumを使うことでコードの可読性や保守性が向上し、バグの予防にもつながります。

この記事では、C#におけるenumの基本的な使い方から、活用パターン、注意点、便利なテクニックまで、初心者にもわかりやすく解説します。実務でも役立つ具体的な例を交えながらご紹介します。


C#におけるenumとは?

enum(列挙型)は、意味のある名前を持った整数の集合を定義するための型です。主に、複数の状態やオプションを扱いたいときに使われます。

enumの基本構文

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

上記のように定義することで、曜日という独自の型を使って変数を宣言できます。


enumの初期値と明示的な値の指定

enumは、何も指定しなければ0から始まる整数値が自動で割り当てられます。

enum ステータス
{
未処理, // 0
処理中, // 1
完了 // 2
}

値を明示的に指定することも可能です。

enum ステータス
{
未処理 = 1,
処理中 = 2,
完了 = 99
}

このようにすれば、意味のある数値を割り当てることができます。


enumを使った変数の宣言と利用方法

列挙型を使って変数を宣言する方法は簡単です。

ステータス 現在のステータス = ステータス.未処理;

if文やswitch文でも活用できます。

switch (現在のステータス)
{
case ステータス.未処理:
Console.WriteLine("まだ処理されていません");
break;
case ステータス.処理中:
Console.WriteLine("現在処理中です");
break;
case ステータス.完了:
Console.WriteLine("処理が完了しました");
break;
}

enumのキャストと整数の変換

enumは内部的には整数として扱われているため、キャストが可能です。

int 数値 = (int)ステータス.処理中; // 2

逆に整数をenumにキャストすることも可能ですが、定義されていない値も通ってしまう点に注意が必要です。

ステータス s = (ステータス)99;
Console.WriteLine(s); // 完了(明示定義済み)

ステータス s2 = (ステータス)100;
Console.WriteLine(s2); // 100(不正な値だがエラーにはならない)

enumとFlags属性でビットフラグを活用する

複数の状態を同時に持たせたい場合、[Flags]属性を使ったビットフラグが有効です。

[Flags]
enum 権限
{
なし = 0,
読み取り = 1,
書き込み = 2,
実行 = 4,
すべて = 読み取り | 書き込み | 実行
}

使用例:

権限 userPermission = 権限.読み取り | 権限.書き込み;

bool canWrite = (userPermission & 権限.書き込み) == 権限.書き込み;
Console.WriteLine(canWrite); // true

enumのToStringとEnum.Parseを使った文字列変換

ToStringで文字列に変換

ステータス s = ステータス.完了;
string str = s.ToString(); // "完了"

Enum.Parseで文字列からenumに変換

ステータス s = (ステータス)Enum.Parse(typeof(ステータス), "処理中");

また、存在しない値を渡すと例外が出るため、Enum.TryParseの使用が推奨されます。

if (Enum.TryParse("完了", out ステータス s))
{
Console.WriteLine("変換成功: " + s);
}

enumを使うときの注意点

  • 定義していない値もキャストできるため、値のチェックが必要
  • enumの値の順番が変更されると予期せぬバグになる可能性がある
  • enumの名前に意味を持たせすぎると柔軟性が失われる

実務で役立つenum活用例

例1:エラーステータス管理

enum エラーコード
{
なし = 0,
ネットワークエラー = 1,
データベースエラー = 2,
未知のエラー = 99
}

例2:ユーザーの権限設定(Flags)

[Flags]
enum ロール
{
一般 = 1,
管理者 = 2,
システム管理者 = 4
}

まとめ:enumはC#開発における強力な道具

enumを正しく使うことで、コードの見通しがよくなり、保守性も向上します。単純な状態管理だけでなく、Flagsを活用した権限管理、定数の置き換えなど、多様な用途に対応できます。

実務でも頻繁に登場する機能なので、使い方をしっかりマスターしておくと、より洗練されたC#のコードを書くことができるでしょう。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。