ここでは、指定した列挙体に含まれているメンバ(定数)の値と名前を列挙する方法を紹介します。ここでは具体的に以下のようなFruits列挙体について考えてみます。
Public Enum Fruits Apple Orange Lemon End Enum
public enum Fruits
{
Apple,
Orange,
Lemon
}
Enum.GetValuesメソッドを使えば、列挙体のメンバの値を配列で取得できます。
また、Enum.GetNamesメソッドを使えば、列挙体のメンバの名前を配列で取得できます。Enum.GetNameメソッドを使えば、指定した値を持つメンバの名前を取得できます。
以下に、Fruits列挙体のメンバの値と名前を列挙する例を示します。
'Fruits列挙体のメンバの値を列挙する Dim val As Fruits For Each val In [Enum].GetValues(GetType(Fruits)) 'メンバ名を取得する Dim eName As String = [Enum].GetName(GetType(Fruits), val) 'メンバの値と名前を表示する Console.WriteLine("{0} = {1}", eName, CInt(val)) Next Console.WriteLine() 'Fruits列挙体のメンバの名前を列挙する Dim name As String For Each name In [Enum].GetNames(GetType(Fruits)) 'メンバの名前を表示する Console.WriteLine(name) Next
//Fruits列挙体のメンバの値を列挙する foreach (Fruits val in Enum.GetValues(typeof(Fruits))) { //メンバ名を取得する string eName = Enum.GetName(typeof(Fruits), val); //メンバの値と名前を表示する Console.WriteLine("{0} = {1}", eName, (int)val); } Console.WriteLine(); //Fruits列挙体のメンバの名前を列挙する foreach (string name in Enum.GetNames(typeof(Fruits))) { //メンバの名前を表示する Console.WriteLine(name); }
結果は、以下のように表示されます。
Apple = 0 Orange = 1 Lemon = 2 Apple Orange Lemon
.NET Framework 4.0以降では、Type.GetEnumValuesメソッドとType.GetEnumNamesメソッドを使って同じことができます。
'Fruits列挙体のメンバの値を列挙する For Each val As Fruits In GetType(Fruits).GetEnumValues() 'メンバ名を取得する Dim eName As String = [Enum].GetName(GetType(Fruits), val) 'メンバの値と名前を表示する Console.WriteLine("{0} = {1}", eName, CInt(val)) Next Console.WriteLine() 'Fruits列挙体のメンバの名前を列挙する For Each name As String In GetType(Fruits).GetEnumNames() 'メンバの名前を表示する Console.WriteLine(name) Next
//Fruits列挙体のメンバの値を列挙する foreach (Fruits val in typeof(Fruits).GetEnumValues()) { //メンバ名を取得する string eName = Enum.GetName(typeof(Fruits), val); //メンバの値と名前を表示する Console.WriteLine("{0} = {1}", eName, (int)val); } Console.WriteLine(); //Fruits列挙体のメンバの名前を列挙する foreach (string name in typeof(Fruits).GetEnumNames()) { //メンバの名前を表示する Console.WriteLine(name); }
GetValuesとGetNamesメソッドが使えない環境であれば、リフレクションを使って行うことができます。
以下に、Fruits列挙体のメンバの値と名前を列挙する例を示します。
'Fruits列挙体のメンバの値と名前を列挙する Dim fi As System.Reflection.FieldInfo For Each fi In GetType(Fruits).GetFields( _ System.Reflection.BindingFlags.Static Or _ System.Reflection.BindingFlags.Public) 'メンバの値を取得する Dim val As Fruits = DirectCast(fi.GetValue(Nothing), Fruits) 'メンバの名前を取得する Dim name As String = fi.Name 'メンバの値と名前を表示する Console.WriteLine("{0} = {1}", name, CInt(val)) Next
//Fruits列挙体のメンバの値と名前を列挙する foreach (System.Reflection.FieldInfo fi in typeof(Fruits).GetFields( System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public)) { //メンバの値を取得する Fruits val = (Fruits)fi.GetValue(null); //メンバの名前を取得する string name = fi.Name; //メンバの値と名前を表示する Console.WriteLine("{0} = {1}", name, (int)val); }
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。