まずはC#でのenum(列挙子)の基本的な宣言方法。特に何もしなければ内部的にはInt32型となり、宣言した順に0から値が割り振られます。
enum DayOfWeek { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }
内部の型や値を指定することも可能。下の例ではuint型となり、宣言した順に1から値が割り振られます。
enum DayOfWeek : uint { Sunday = 1, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }
ドロップダウンリストなどの項目にする場合、Enum.GetValuesメソッドで全ての値を列挙させます。
foreach (var item in Enum.GetValues(typeof(DayOfWeek))) { comboBox1.Items.Add(item.ToString()); }
文字列からenum値に変換する場合、Enum.Parseメソッド または Enum.TryParseメソッド を使用します。
// Enum.Parse() DayOfWeek w = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), "Sunday"); // Enum.TryParse() Enum.TryParse<DayOfWeek>("Sunday", out w);
複数の値を取る場合、[Flags]属性を付けてビットフィールドとして扱います。
[Flags] enum DayOfWeek : byte { Sunday = 0x01, Monday = 0x02, Tuesday = 0x04, Wednesday = 0x08, Thursday = 0x10, Friday = 0x20, Saturday = 0x40 }
OR演算子 | で複数指定できます。また、ToString()すると下のようにカンマ区切り出力されます。
DayOfWeek weekend = DayOfWeek.Sunday | DayOfWeek.Saturday; Console.WriteLine(weekend.ToString()); // output: Sunday, Saturday
HasFlagメソッドでフラグが含まれるかを判定します。
public bool IsWeekend(DayOfWeek w) { return w.HasFlag(DayOfWeek.Sunday | DayOfWeek.Saturday); }