Programmer's Highway

VB.NETの無責任なTips 備忘録 メモなど

VB.NET Enumの使い方(まとめ)

[English]

まずはVB.NETでのenum(列挙子)の基本的な宣言方法。特に何もしなければ内部的にはInt32型となり、宣言した順に0から値が割り振られます。

    Enum DayOfWeek
        Sunday
        Monday
        Tuesday
        Wednesday
        Thursday
        Friday
        Saturday
    End Enum

内部の型や値を指定することも可能。下の例ではUInteger型となり、宣言した順に1から値が割り振られます。

    Enum DayOfWeek As UInteger
        Sunday = 1
        Monday
        Tuesday
        Wednesday
        Thursday
        Friday
        Saturday
    End Enum

ドロップダウンリストなどの項目にする場合、Enum.GetValuesメソッドで全ての値を列挙させます。

    For Each item In [Enum].GetValues(GetType(DayOfWeek))
        comboBox1.Items.Add(item.ToString())
    Next

文字列からenum値に変換する場合、Enum.Parseメソッド または Enum.TryParseメソッド を使用します。

    ' Enum.Parse()
    Dim w As DayOfWeek = DirectCast([Enum].Parse(GetType(DayOfWeek), "Sunday"), DayOfWeek)
    
    ' Enum.TryParse()
    [Enum].TryParse(Of DayOfWeek)("Sunday", w)

複数の値を取る場合、<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 DayOfWeekAs Boolean
        Return w.HasFlag(DayOfWeek.Sunday Or DayOfWeek.Saturday)
    End Function
使用環境: Visual Studio 2010 .NET Framework 4