enum(列挙型)
- enumを使うことで可読性が上がる
- enumの型変換の使い方を知る

・スクールは200,000円など高額、Freeksはサブスク型で10,780円から受講可能
・合うか不安でも、Freeksなら入会金0円、いつでも退会可能だから気軽に始められる
・途中で学ぶ言語を変更してもOK、追加料金なし
・24時間いつでも質問が可能、現役エンジニアが回答
・学習のみならず、転職支援もサポートあり、転職成功率は94.8%
enum(列挙型)とは
enumは決まった関連する定数の集合を定義したデータ型です。
例えば、曜日のように決まった値(月、火、水、木、金)が存在する場合に、名前を付けて型として管理ができるようにします。
名前を付けられるので、可読性が上がる効果があります。
enum(列挙型)の使い方
次のようにクラス内に定義します。
publicやprivateなどアクセス修飾子を付けます。
enum の後ろに列挙型の名称を付けて、続けて{}の中にカンマ区切りで値の名称を列挙します。
public enum 列挙型名
{
値1の名称,
値2の名称,
・・・
}
public enum Colors
{
red = 1,
blue = 2,
green = 3,
yellow = 4
}
enumを使ったサンプルプログラム
サンプルプログラムを紹介します。
複数の結果があるメソッドの戻り値としてenumを使った場合の例です。
using System;
class Program
{
// メソッドの戻り値列挙型
public enum SimulationMethodResults
{
Success,
Fail,
Skip
}
public static void Main()
{
// メソッドから結果を取得
SimulationMethodResults result = SimulationMethod();
// 結果を表示
Console.WriteLine(string.Format("result = {0}", result));
// キー入力待ち
System.Console.ReadKey();
}
// 結果を返す仮のメソッド
public static SimulationMethodResults SimulationMethod()
{
return SimulationMethodResults.Success;
}
}
C:¥Windows¥Microsoft.NET¥Framework¥v4.0.30319¥csc.exe *.cs
pause
ファイルを作成できたらCompile.batを実行してみましょう。
同じフォルダにProgram.exeが作成されます。
Program.exeを実行して「Program.exe 実行結果」のように表示されたら成功です。
result = Success
enumの型変換
enumは数値として管理されています。
定義時に特に指定がない場合、上から0、1、2・・・と連番が振られます。
enumの各値の後ろに"= 数字"を付けることで任意の数値として管理するこも可能です。
public enum Colors
{
red = 1,
blue = 2,
green = 3,
yellow = 4
}
ToString()するとenumの名称を文字列で返します。
(int)を付けることでint型に変換することができます。
Console.WriteLine(string.Format("red.ToString = {0}", Colors.red.ToString()));
// → red.ToString = red
Console.WriteLine(string.Format("(int)red = {0}", (int)Colors.red));
// → (int)red = 1
数値に(列挙型名)を付けることで、enumに変換するこができます。
変換できるかどうかは、Enum.EsDefined(typeof(列挙型名), 数値)で調べることができます。
if (Enum.IsDefined(typeof(Colors), 4)) // → trueになる
{
Colors color = (Colors)4;
Console.WriteLine(string.Format("(Colors)4 = {0}", color));
// → (Colors)4 = yellow
}
if (!Enum.IsDefined(typeof(Colors), 5)) // → IsDefinedの結果はfalseになる
{
Console.WriteLine("5はColorsに含まれません");
}
Enum.GetNames(typeof(列挙型名))で列挙側の各値の名称を取得、Enum.GetValues(typeof(列挙型名))で各値の数値を取得できます。
foreach (string name in Enum.GetNames(typeof(Colors)))
{
Console.WriteLine(string.Format("Color Name = {0}", name));
}
foreach (int value in Enum.GetValues(typeof(Colors)))
{
Console.WriteLine(string.Format("Color Value = {0}", value));
}
まとめたサンプルプログラムをご紹介します。
using System;
class Program
{
public enum Colors
{
red = 1,
blue = 2,
green = 3,
yellow = 4
}
public static void Main()
{
Console.WriteLine(string.Format("red = {0}", Colors.red));
Console.WriteLine(string.Format("red.ToString = {0}", Colors.red.ToString()));
Console.WriteLine(string.Format("(int)red = {0}", (int)Colors.red));
if (Enum.IsDefined(typeof(Colors), 4))
{
Colors color = (Colors)4;
Console.WriteLine(string.Format("(Colors)4 = {0}", color));
}
if (!Enum.IsDefined(typeof(Colors), 5))
{
Console.WriteLine("5はColorsに含まれません");
}
foreach (string name in Enum.GetNames(typeof(Colors)))
{
Console.WriteLine(string.Format("Color Name = {0}", name));
}
foreach (int value in Enum.GetValues(typeof(Colors)))
{
Console.WriteLine(string.Format("Color Value = {0}", value));
}
// キー入力待ち
System.Console.ReadKey();
}
}
前述と同じように同フォルダにCompile.batも用意して実行、Program.exeを実行してみてください。
「Program.exe 実行結果」のように表示されます。
red = red
red.ToString = red
(int)red = 1
(Colors)4 = yellow
5はColorsに含まれません
Color Name = red
Color Name = blue
Color Name = green
Color Name = yellow
Color Value = 1
Color Value = 2
Color Value = 3
Color Value = 4