列挙型に複数の値を保持する方法

あまり知られていませんが、列挙型の変数には複数の値を保持することができます。

複数の値を取る場合、次のように<Flags>属性を付けてビットフィールドとして扱います。

    <Flags()>
    Enum DayOfWeek As Byte
        Sunday = 1
        Monday = 2
        Tuesday = 4
        Wednesday = 8
        Thursday = 16
        Friday = 32
        Saturday = 64
    End Enum

or演算子で複数指定できます。また、ToString()すると下のようにカンマ区切り出力されます。

    Dim weekend As DayOfWeek = DayOfWeek.Sunday Or DayOfWeek.Saturday
    Console.WriteLine(weekend.ToString())        ' output: Sunday, Saturday

HasFlagメソッドでフラグが含まれるかを判定します。

    Public Function IsWeekend(w As DayOfWeek) As Boolean
        Return w.HasFlag(DayOfWeek.Sunday Or DayOfWeek.Saturday)
    End Function