C# Enumの使い方(まとめ)

[English]

まずは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);
        }
使用環境: Visual Studio 2010 .NET Framework 4

C# メニューリスト