区分データ等のソース上の既読性をアップする場合や、間違いを無くする場合に列挙体(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
コメント