忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

列挙体(Enum)の宣言と、メンバの値と名前の取得について(GetValues, GetName)

区分データ等のソース上の既読性をアップする場合や、間違いを無くする場合に列挙体(Enum)を用います。
列挙体(Enum)の宣言は以下の様になります。 Enum 宣言の中のメンバーは値を指定しなくても、0からの値が割り振られます。 また、メンバーの値を"="イコールで定義すればその値となりますが、それ以降の値の定義されていないものは1加算された値が定義されます。

以下のソースでは、メンバー値を明示的に定義しない場合と、定義した場合の例を示します。

列挙体(Enum)の宣言

    'メンバ(定数)の値を定義しない場合のEnum
    Enum TestEnum1
        Japan
        USA
        China
        Korea
        Other
    End Enum

    'メンバ(定数)の値を定義する場合のEnum
    Enum TestEnum2
        Japan = 100
        USA
        China
        Korea = 1000
        Other
    End Enum

TestEnum1 では「Japan」が「0」の値で、以下「USA」「China」「Korea」「Other」は順に「1」「2」「3」「4」の値となります。 また、TestEnum2 では「Japan」が「100」の値で、順に「101」「102」「1000」「1001」の値となります。

実際にプログラムで列挙体(Enum)のメンバー名とその値を列挙する方法を以下に示します。
以下のソースでは、 Enum.GetValues メソッドを用いることで、指定した列挙体に含まれている定数の値の配列が 返されます。 Enum.GetValues メソッドでは指定した値を持つ指定した列挙体にある定数の名前を取得します。

Enumのメンバ名と値を表示

    'Enumのメンバ名と値を表示するテスト
    Private Sub EnumTest_Click(sender As Object, e As EventArgs) Handles EnumTest.Click
        'TestEnum1のメンバの値を列挙
        Dim Enum1Val As TestEnum1
        Dim strMsg As String = ""
        For Each Enum1Val In [Enum].GetValues(GetType(TestEnum1))
            'メンバ名を取得する
            Dim strName As String = [Enum].GetName(GetType(TestEnum1), Enum1Val)
            'メンバの値と名前を表示する
            strMsg &= String.Format("{0} = {1}", strName, CInt(Enum1Val)) & vbCrLf
        Next
        MsgBox("TestEnum1:" & vbCrLf & strMsg)

        'TestEnum2のメンバの値を列挙
        Dim Enum2Val As TestEnum1
        strMsg = ""
        For Each Enum2Val In [Enum].GetValues(GetType(TestEnum2))
            'メンバ名を取得する
            Dim strName As String = [Enum].GetName(GetType(TestEnum2), Enum2Val)
            'メンバの値と名前を表示する
            strMsg &= String.Format("{0} = {1}", strName, CInt(Enum2Val)) & vbCrLf
        Next
        MsgBox("TestEnum2:" & vbCrLf & strMsg)

        Enum2Val = TestEnum2.Other
    End Sub

尚、Enumには同じ値のものを別のメンバー名で定義することが可能ですが、 同じ値のメンバーがある場合は、注意が必要だと思います。 (プログラム上、必要になることもありますので、制限は必要無いとは思います)

列挙体(Enum)の宣言その2

    'メンバ(定数)の値を定義する場合のEnum:2
    Enum TestEnum2
        Japan = 100
        USA
        China
        Korea = 1000
        Other = 1000    '同じ値で「Other」を宣言する
    End Enum











PR

コメント

コメントを書く