【やさしく理解する】列挙型(enum)は何者?

1. まず安心してください

列挙型(enum)は、ひとことで言うと

「選択肢に名前を付ける仕組み」

です。

「文字列で書くとミスしやすいもの」を、ミスしにくくします。


2. 文字列で書くと何が困る?

たとえば「学習状況」を文字列で持つとします。

string status = "done";

ここで困るのが、

  • “done” と “Done” が混ざる
  • “don” みたいなタイプミスが起きる
  • 何種類あるのかコードから見えない

つまり、バグが入りやすい


3. enumで「選択肢を固定」する

列挙型で、選択肢を先に決めてしまいます。

enum StudyStatus
{
    NotStarted, // 未着手
    InProgress, // 進行中
    Done        // 完了
}

これで、StudyStatus はこの3つのどれかしか入りません。


4. 使い方(超基本)

StudyStatus status = StudyStatus.InProgress;
Console.WriteLine(status);

出力は InProgress のようになります。


5. if文が読みやすくなる

文字列より読みやすいのが強みです。

if (status == StudyStatus.Done)
{
    Console.WriteLine("完了です");
}
else
{
    Console.WriteLine("まだです");
}

6. Studentにenumを持たせると「状態管理」が簡単

enum StudyStatus
{
    NotStarted,
    InProgress,
    Done
}

class Student
{
    public string Name { get; set; }
    public string Hobby { get; set; }
    public StudyStatus Status { get; set; }

    public void Print()
    {
        Console.WriteLine($"名前: {Name}");
        Console.WriteLine($"趣味: {Hobby}");
        Console.WriteLine($"状況: {Status}");
        Console.WriteLine();
    }
}

使う側:

var s = new Student
{
    Name = "山田たろう",
    Hobby = "映画",
    Status = StudyStatus.InProgress
};

s.Print();

ここで大事なのは、

  • Status に入れられるのは NotStarted / InProgress / Done のどれかだけ
  • 変な文字列は入らない

という点です。


7. switch文との相性が良い

switch (s.Status)
{
    case StudyStatus.NotStarted:
        Console.WriteLine("まずは着手しましょう");
        break;

    case StudyStatus.InProgress:
        Console.WriteLine("いいペースです");
        break;

    case StudyStatus.Done:
        Console.WriteLine("完了です");
        break;
}

「状態ごとの処理」が非常に書きやすいです。


8. 今日のまとめ

  • enumは「選択肢に名前を付ける」仕組み
  • 文字列よりミスが減る
  • if/switchが読みやすくなる
  • Studentの「状態」みたいなものを持たせると効果が出る

おまけ:よくある注意(1つだけ)

enumは “文字列” ではなく “型” です。

だから、こうは書けません。

// これはダメ
s.Status = "Done";

正しくはこうです。

s.Status = StudyStatus.Done;

訪問数 23 回, 今日の訪問数 23回

C#,列挙型

Posted by hidepon