【やさしく理解する】列挙型(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回


ディスカッション
コメント一覧
まだ、コメントがありません