■C#のenum
C#のenumは、定数(constant)を表すものでプログラムの可読性を高くします。
enumの各要素は、特に指定をしていなくても一番目の要素が 0、二番目の要素が 1、三番目の要素が 2などを割当されます。もちろん、任意の数字を設定することも可能です。
enumは、名前空間内で宣言ができます。クラスやメソッド内では宣言できません。
public enum Favorite
{
Fish,
Dog,
Cat
}
上記の例は、Favoriteというenumを定義したものです。Fishは0、Dogは1、Catは2を持ちます。
■C#のenumの使用方法
enumは、数字型のオブジェクトと交換性を持ちます。例え、enumタイプの変数をintにキャストすると該当enumの値を取得できます。
class Program
{
enum Favorite
{
Fish, // 0
Dog, // 1
Cat = 5, // 5
Pig = 10 // 10
}
static void Main(string[] args)
{
Favorite myFavorite;
// enumに値を代入
myFavorite = Favorite.Fish;// enumをintにキャスト
int favValue = (int) myFavorite;if (myFavorite == Favorite.Fish) // enumと比較
{
Console.WriteLine(“I Love Fish!”);
}
}
}
■flag enum
enumは、ビットで区別できる値(例:1, 2, 4, 8…)を持つように定義できます。
enumの宣言文の直前に [Flags] というAttributeを指定することで可能になります。
[Flags]属性をもつenumは、OR演算子やAND演算子を利用してenumが特定の値を含めているか確認することができます。
[Flags]
enum Favorite
{
Fish = 0,
Dog = 1,
Cat = 2,
Pig = 4,
Lion = 8
}
static void Main(string[] args)
{
// OR演算子で多重Flagを割当
Favorite fv = Favorite.Dog | Favorite.Pig;// AND演算子で値チェック
if ((fv & Favorite.Dog) != 0)
{
//HasFlag()で値チェック
if (fv.HasFlag(Favorite.Pig))
{
// Dog, Pig出力
Console.WriteLine(fv.ToString());
}
}
}