enumの使い方
enumの使い方についてみていきましょう。
enumを定義する方法
enumは以下のように定義します。
enum オブジェクト名 {列挙子1, 列挙子2, ・・・};
列挙子の名前には、英数字を使うことはもちろんですが、日本語を指定することもできます。
ただし、列挙子の名前に空白を使用することはできませんので、注意しましょう。enumの定義の例をみてみましょう。
enum Days {
Mon,
Tue,
Wed,
Thu,
Fri,
Sat,
Sun
}
以下のように列挙子は日本語でも定義できます。
enum Days {
月曜日,
火曜日,
水曜日,
木曜日,
金曜日,
土曜日,
日曜日
}
列挙子のデフォルトの型はint型ですが、別の型を指定する場合は以下のように指定します。また、初期化子を使って以下のように定数の値を変更することもできます。
enum Days : byte{
Mon = 1,
Tue,
Wed,
Thu,
Fri,
Sat = 11,
Sun
}
初期化子を変更すると変更した値から順に定数の値が付けられます。この場合は例えばTueには2が、Wedには3というように定数が付けられます。
switch文で使う方法
enumはswitch-case文とあわせてよく使われます。caseの値にenumの列挙子を指定することで、条件の場合分けが読みやすくなります。サンプルコードで確認しましょう。
using System;
namespace Sample
{
// enumの定義
enum Days {
Mon,
Tue,
Wed,
Thu,
Fri,
Sat,
Sun
}
class Sample
{
static void Main()
{
Days day = Days.Wed;
switch(day) {
case Days.Mon:
case Days.Tue:
case Days.Wed:
case Days.Thu:
case Days.Fri:
Console.WriteLine("平日です");
break;
case Days.Sat:
case Days.Sun:
Console.WriteLine("休日です");
break;
default:
Console.WriteLine("不正です");
break;
}
Console.ReadKey();
}
}
}
実行結果:
平日です
列挙子の数値を取得する方法
列挙子の数値を取得するには列挙子に指定した型でキャストします。サンプルコードで確認しましょう。
using System;
namespace Sample
{
// enumの定義
enum Days : byte{
Mon = 1,
Tue,
Wed,
Thu,
Fri,
Sat = 11,
Sun
}
class Sample
{
static void Main()
{
Days day = Days.Wed;
Console.WriteLine("{0}の定数の値は{1}", day, (byte)day);
Console.ReadKey();
}
}
}
実行結果:
Wedの定数の値は3
列挙子の値を文字列で取得する方法
enumの列挙子の値を文字列で使いたいという機会は多くあります。いくつか方法がありますので、みていきましょう。
ToStringを使う方法
ToStringメソッドを使うと列挙子を文字列に変換することができます。サンプルコードでToStringメソッドの使い方を確認しましょう。
using System;
namespace Sample
{
// enumの定義
enum Days : byte{
Mon = 1,
Tue,
Wed,
Thu,
Fri,
Sat = 11,
Sun
}
class Sample
{
static void Main()
{
Days day = Days.Wed;
string dayName = day.ToString();
Console.WriteLine(dayName);
Console.ReadKey();
}
}
}
実行結果:
Wed
GetNameを使う方法
EnumクラスのGetNameメソッドを使って、列挙子を文字列に変換する方法もあります。サンプルコードで確認しましょう。
using System;
namespace Sample
{
// enumの定義
enum Days : byte{
Mon = 1,
Tue,
Wed,
Thu,
Fri,
Sat = 11,
Sun
}
class Sample
{
static void Main()
{
Days day = Days.Wed;
string dayName = Enum.GetName(typeof(Days), day);
Console.WriteLine(dayName);
Console.ReadKey();
}
}
}
実行結果:
Wed
列挙子リストの全ての名前を取得する方法
EnumクラスのGetNamesメソッドを使うと、列挙子リストの全ての名前を取得することができます。サンプルコードで確認しましょう。
using System;
namespace Sample
{
// enumの定義
enum Days : byte{
Mon = 1,
Tue,
Wed,
Thu,
Fri,
Sat = 11,
Sun
}
class Sample
{
static void Main()
{
string[] dayNames = Enum.GetNames(typeof(Days));
Console.WriteLine("[{0}]", string.Join(", ", dayNames));
Console.ReadKey();
}
}
}
実行結果:
[Mon, Tue, Wed, Thu, Fri, Sat, Sun]
列挙子に別の名前を付けて取得する方法
列挙子に別の名前を付けて呼び出すこともできます。いくつか方法がありますので、みていきましょう。
配列、拡張メソッドを使う方法
拡張クラスを定義し、拡張メソッドを使って、ToStringメソッドと同じように呼び出せるようにしてみましょう。
using System;
namespace Sample
{
// enumの定義
enum Days {
Mon,
Tue,
Wed,
Thu,
Fri,
Sat,
Sun
}
// 拡張クラス
static class Sample
{
static void Main()
{
Days day = Days.Wed;
Console.WriteLine("{0}は{1}", day.ToString(), day.GetName());
Console.ReadKey();
}
// 拡張メソッド
static string GetName(this Days day) {
string[] dayNames = {"月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日", "日曜日"};
return dayNames[(int)day];
}
}
}
実行結果:
Wedは水曜日
Dictionaryを使う方法
拡張メソッドを使わずにDictionaryを使う方法もあります。サンプルコードで確認しましょう。
using System;
using System.Collections.Generic;
namespace Sample
{
// enumの定義
enum Days {
Mon,
Tue,
Wed,
Thu,
Fri,
Sat,
Sun
}
class Sample
{
static void Main()
{
var myTable = new Dictionary<string, string>()
{
{"Mon", "月曜日"},
{"Tue", "火曜日"},
{"Wed", "水曜日"},
{"Thu", "木曜日"},
{"Fri", "金曜日"},
{"Sat", "土曜日"},
{"Sun", "日曜日"}
};
Days day = Days.Wed;
string dayName = day.ToString();
Console.WriteLine("{0}は{1}", dayName, myTable[dayName]);
Console.ReadKey();
}
}
}
実行結果:
Wedは水曜日
Dictionaryの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。
【C#入門】DictionaryのKey、Valueの使い方(要素の追加、取得も解説)
更新日 : 2019年4月22日
属性を定義する方法
属性で別の名前を定義して呼び出す方法もあります。属性とはクラスやenumの列挙子などに付与するメタ情報のことです。列挙子などの「[ ]」を使って付与します。
拡張メソッドで取得できるようにしてみましょう。
using System;
using System.ComponentModel;
namespace Sample
{
// enumの定義
enum Days {
[Description("月曜日")]
Mon,
[Description("火曜日")]
Tue,
[Description("水曜日")]
Wed,
[Description("木曜日")]
Thu,
[Description("金曜日")]
Fri,
[Description("土曜日")]
Sat,
[Description("日曜日")]
Sun
}
// 拡張クラス
static class Sample
{
static void Main()
{
Days day = Days.Wed;
Console.WriteLine("{0}は{1}", day.ToString(), day.GetName());
Console.ReadKey();
}
// 拡張メソッド
static string GetName(this Days day) {
var gm = day.GetType().GetMember(day.ToString());
var attributes = gm[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
var description = ((DescriptionAttribute)attributes[0]).Description;
return description;
}
}
}
実行結果:
Wedは水曜日
まとめ
ここでは、enumの使い方、enumの列挙子を文字列で取得する方法について説明しました。enumの列挙子を文字列で取得する方法については、いくつか方法がありますので、使いこなすことができるように、この記事を何度も参考にして下さいね!