DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

列挙体のメンバの値や名前を列挙する

ここでは、指定した列挙体に含まれているメンバ(定数)の値と名前を列挙する方法を紹介します。ここでは具体的に以下のようなFruits列挙体について考えてみます。

VB.NET
コードを隠すコードを選択
Public Enum Fruits
    Apple
    Orange
    Lemon
End Enum
C#
コードを隠すコードを選択
public enum Fruits
{
    Apple,
    Orange,
    Lemon
}

GetValuesとGetNamesメソッドを使用する方法

Enum.GetValuesメソッドを使えば、列挙体のメンバの値を配列で取得できます。

また、Enum.GetNamesメソッドを使えば、列挙体のメンバの名前を配列で取得できます。Enum.GetNameメソッドを使えば、指定した値を持つメンバの名前を取得できます。

以下に、Fruits列挙体のメンバの値と名前を列挙する例を示します。

VB.NET
コードを隠すコードを選択
'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
C#
コードを隠すコードを選択
//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メソッドを使って同じことができます。

VB.NET
コードを隠すコードを選択
'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
C#
コードを隠すコードを選択
//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列挙体のメンバの値と名前を列挙する例を示します。

VB.NET
コードを隠すコードを選択
'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
C#
コードを隠すコードを選択
//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);
}
  • 履歴:
  • 2012/7/12 GetEnumValuesとGetEnumNamesメソッドの説明を追加。
  • 2013/7/16 GetEnumValuesとGetEnumNamesメソッドの例がFruits列挙体になっていなかったのを修正。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。