今回はC#のenum(列挙体)の使い方を解説していきます。
enum(列挙体)とは?
enumキーワードは列挙体(enumeration type)とも言われており、一連の複数の定数に対して名前を付けられる特徴があります。
代表的な例が曜日や日付、色などです。
ちなみに、enumの読み方は正確には「イヌーム」や「イニューム」と呼ぶようです。これは英語の「enumeration」から来ており「inùːməréiʃən」と発音するためと言われています。
ただ、私の周りでは「イーナム」とか「エナム」と読んだりしているので、自分が呼びやすい読み方をすればいいでしょう。
enumの使い方
続いてenumの使い方を解説していきましょう。
enumを使ってスマホメーカーを定義してみる
ここでは、スマホのメーカーを定義してみたいと思います。enum オブジェクト名 {列挙子1, 列挙子2, ・・・};
で定義できます。
enumの定義
enum SmartPhoneManufacturer
{
Apple,
Google,
Sony,
Fujitsu,
Sharp,
}
列挙体の初期のデータ型はintで0からインクリメントされて定義されていきます。試しに、そのまま値を出力するコードを書いてみます。
コード
ng System;
namespace EnumTest
{
class Program
{
enum SmartPhoneManufacturer
{
Apple,
Google,
Sony,
Fujitsu,
Sharp,
}
static void Main(string[] args)
{
Console.WriteLine((int)SmartPhoneManufacturer.Apple);
Console.WriteLine((int)SmartPhoneManufacturer.Google);
Console.WriteLine((int)SmartPhoneManufacturer.Sony);
Console.WriteLine((int)SmartPhoneManufacturer.Fujitsu);
Console.WriteLine((int)SmartPhoneManufacturer.Sharp);
Console.ReadLine();
}
}
}
実行結果
0
1
2
3
4
0, 1 2…4と順番に出力されました。
enmuをオーバーライドしてみる
列挙体の数値はオーバーライドできるので、以下のように個別に定義することも可能です。
列挙体を個別の数値で定義
enum SmartPhoneManufacturer
{
Apple = 1,
Google,
Sony = 80,
Fujitsu,
Sharp,
}
enumの方をintから変換してみる
列挙体は何も指定していなければデフォルトはint型です。他にもlong, short, byteのみであれば定義することができます。これ以外は非推奨となっているため、例えば、char型で定義しても例外がスローされる可能性が高いので注意が必要です。
enumをbyteで定義するコード
enum SmartPhoneManufacturer : byte
{
Apple = 0x01,
Google,
Sony,
Fujitsu = 0xdd,
Sharp,
}
そのまま順番に値を出力すると結果は以下になります。
実行結果
1
2
3
221
222
foreachを使って列挙体の要素を全出力してみる
enumで定義した要素をすべて出力したい、そんな時はforeach
を使えば一発で全要素を取得することができます。
foreachを使った列挙体の全要素出力
using System;
namespace EnumTest
{
class Program
{
enum SmartPhoneManufacturer:byte
{
Apple = 0x01,
Google,
Sony,
Fujitsu = 0xdd,
Sharp,
}
static void Main(string[] args)
{
foreach(string m in Enum.GetNames(typeof(SmartPhoneManufacturer)))
{
Console.WriteLine(m);
}
Console.ReadLine();
}
}
}
実行結果
Apple
Google
Sony
Fujitsu
Sharp
また、Enum.GetValues
を使うことで値もすべて取り出すことができます。
foreachを使った列挙体の全値出力
using System;
namespace EnumTest
{
class Program
{
enum SmartPhoneManufacturer:byte
{
Apple = 0x01,
Google,
Sony,
Fujitsu = 0xdd,
Sharp,
}
static void Main(string[] args)
{
foreach(byte m in Enum.GetValues(typeof(SmartPhoneManufacturer)))
{
Console.WriteLine(m);
}
Console.ReadLine();
}
}
}
実行結果
1
2
3
221
222
Enumを使用する際の注意点
列挙型は定数となるため、enumの値はコンパイル時に定数に置き換えられます。
const定義したものと同様に、enumに変更を加えた場合、そのenumを参照しているアセンブリなども再コンパイルする必要が生じます。
コメント