C# で列挙型を列挙する方法

Payel Ganguly 2023年10月12日
  1. Enum.GetNames() メソッドによる enum の列挙
  2. C# で enum を列挙する Enum.GetValues() メソッド
  3. その他の例
  4. 備考:
C# で列挙型を列挙する方法

このチュートリアルでは、C# で列挙型を列挙する方法を紹介し、いくつかのコード例を挙げて実演します。

前回のチュートリアルでは、C# を使って列挙から int 値を取得する方法を学びました。前回のチュートリアルで述べたように、Enumeration または enum は、基本となる整数型の名前付き定数のセットを定義するユーザ定義の値の型です。

enum の一般的な構文は以下のようになっています。

enum<enum_name> { enumeration_list }
;

enum_name は列挙型の名前を指定し、enumeration_list はカンマ区切りの識別子のリストを指定します。

次に、C# ですべての列挙型値をループしたり、列挙したりする方法を見てみましょう。列挙する方法はいくつかあります。以下の例では、これらの方法を説明します。

Enum.GetNames() メソッドによる enum の列挙

目的は Enum.GetName() メソッドを用いて 列挙リスト に含まれる定数の名前の配列を取得することです。foreach ループを使って名前の配列を出力します。

using System;

public class Example1 {
  public enum Fruits { Apple, Banana, Orange, Watermelon, Mango, Strawberry }

  public static void Main() {
    foreach (string fruit in Enum.GetNames(typeof(Fruits))) {
      Console.WriteLine(fruit);
    }
  }
}

出力:

Apple
Banana
Orange
Watermelon
Mango
Strawberry

C# で enum を列挙する Enum.GetValues() メソッド

もう一つの方法は、列挙リストの定数の値の配列を取得する Enum.GetValues() メソッドを使用することです。また、foreach ループを使って各値を表示します。

using System;

public class Example2 {
  public enum Subjects { Maths, Biology, English, Chemistry, Physics, History }

  public static void Main() {
    foreach (Subjects sub in Enum.GetValues(typeof(Subjects))) {
      Console.WriteLine(sub);
    }
  }
}

出力:

Maths
Biology
English
Chemistry
Physics
History

それでは、Enum.GetValues() メソッドの使用方法の全体像を把握するために、さらにいくつかの例を見てみましょう。

その他の例

例 1

using System;

public class Demo1 {
  enum Colors { White, Black, Red, Green, Blue }
  ;
  enum Planets { Earth = 0, Jupiter = 10, Saturn = 20, Mars = 30, Venus = 40 }
  ;

  public static void Main() {
    Console.WriteLine("The list of Colors Enum are:");
    foreach (int i in Enum.GetValues(typeof(Colors))) Console.WriteLine(i);

    Console.WriteLine();

    Console.WriteLine("The list of Planets Enum are:");
    foreach (int i in Enum.GetValues(typeof(Planets))) Console.WriteLine(i);
  }
}

出力:

The list of Colors Enum are:
0
1
2
3
4

The list of Planets Enum are:
0
10
20
30
40 

上記の例の最初の部分では、配列の要素は enumeration 定数のバイナリ値(つまり、符号なしの値)によってソートされます。

例 2

using System;

enum SignValue { NegativeVal = -1, ZeroVal = 0, PositiveVal = 1 }
;

public class MainValue {
  public static void Main() {
    foreach (var val in Enum.GetValues(typeof(SignValue))) {
      Console.WriteLine("{0,3} 0X{0:X8} {1}", (int)val, ((SignValue)val));
    }
  }
}

出力:

0 ZeroVal 0X00000000
1 PositiveVal 0X00000001
-1 NegativeVal 0XFFFFFFFF

上の例では、Enum.GetValues() メソッドが返す配列の情報を示しています。

備考:

Enum.GetValues() メソッドは enum の各要素に対応する値を含む配列を返します。複数の要素が同じ値を持つ場合、生成される配列には重複した値が含まれます。この場合、返された配列の各値を指定して Enum.GetNames() メソッドを呼び出しても、重複する値を持つ要素に割り当てられた一意の名前は復元されません。すべての列挙メンバの名前を正常に取得するには、Enum.GetNames() メソッドを呼び出すことをお勧めします。

関連記事 - Csharp Enum