0Pricing
C# Academy · レッスン

列挙値の反復処理

Enum.GetValuesですべてのメンバーを列挙します。

「列挙値の反復処理」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。

列挙型のメンバーを列挙する

メニューを作成する場合など、列挙型のすべての値が必要になることがあります。Enum.GetValues を使うと、それらを取得できます。

using System;

enum Day { Mon, Tue, Wed }
class Program {
    static void Main() {
        foreach (Day d in Enum.GetValues<Day>())
            Console.WriteLine(d);
    }
}

ジェネリック GetValues

ジェネリックな Enum.GetValues<T>() は、直接ループ処理できる、型安全な配列を返します。

using System;

enum Color { Red, Green, Blue }
class Program {
    static void Main() {
        Color[] all = Enum.GetValues<Color>();
        Console.WriteLine(all.Length);
    }
}

メンバー名の取得

Enum.GetNames<T>() は、メンバー名を文字列として返します。

using System;

enum Color { Red, Green, Blue }
class Program {
    static void Main() {
        foreach (string name in Enum.GetNames<Color>())
            Console.WriteLine(name);
    }
}

名前と値を同時に扱う

値をループ処理し、int にキャストすると、名前と基になる数値の両方を出力できます。

using System;

enum Color { Red = 1, Green = 2, Blue = 4 }
class Program {
    static void Main() {
        foreach (Color c in Enum.GetValues<Color>())
            Console.WriteLine(c + " = " + (int)c);
    }
}

メンバー数のカウント

値の配列の長さから、列挙型にいくつのメンバーがあるかがわかります。

using System;

enum Suit { Hearts, Diamonds, Clubs, Spades }
class Program {
    static void Main() {
        int count = Enum.GetValues<Suit>().Length;
        Console.WriteLine(count);
    }
}

メニューの作成

値を反復処理すると、番号付きの選択肢リストを出力するのに便利です。

using System;

enum Option { Start, Settings, Quit }
class Program {
    static void Main() {
        int i = 1;
        foreach (Option o in Enum.GetValues<Option>())
            Console.WriteLine(i++ + ") " + o);
    }
}

反復処理中のフィルタリング

ループ処理中に、None のセンチネルなど、特定のメンバーをスキップできます。

using System;

enum State { None, Active, Closed }
class Program {
    static void Main() {
        foreach (State s in Enum.GetValues<State>())
            if (s != State.None)
                Console.WriteLine(s);
    }
}

LINQ を使った反復処理

Enum.GetValues と LINQ を組み合わせて、フィルタリングや変換を行えます。

using System;
using System.Linq;

enum Level { Low = 1, Medium = 2, High = 3 }
class Program {
    static void Main() {
        var highOnes = Enum.GetValues<Level>().Where(l => (int)l >= 2);
        foreach (var l in highOnes) Console.WriteLine(l);
    }
}

従来の非ジェネリック形式

ジェネリックが登場する前は、Enum.GetValues(typeof(T)) を使用していました。これは型指定のない配列を返します。

using System;

enum Color { Red, Green, Blue }
class Program {
    static void Main() {
        foreach (Color c in Enum.GetValues(typeof(Color)))
            Console.WriteLine(c);
    }
}

Flags と反復処理

flags 列挙型を反復処理すると、個々のフラグが一覧表示されます。また、組み合わせ用の便利なメンバーも表示されるため、必要に応じてフィルタリングしてください。

using System;

[Flags]
enum Perm { Read = 1, Write = 2, Execute = 4 }
class Program {
    static void Main() {
        foreach (Perm p in Enum.GetValues<Perm>())
            Console.WriteLine(p + " = " + (int)p);
    }
}

列挙型を反復処理する理由

反復処理を使うと、UI と検証処理を列挙型と同期できます。メンバーを追加すれば、ループにも自動的に反映されます。

using System;

enum Size { Small, Medium, Large }
class Program {
    static void Main() {
        foreach (Size s in Enum.GetValues<Size>())
            Console.WriteLine("Available: " + s);
    }
}

理解度チェック

列挙型の反復処理について理解できているか確認しましょう。

まとめ

Enum.GetValues<T>() はすべてのメンバーを型指定された配列として返し、Enum.GetNames<T>() はそれらの名前を返します。ループ処理によって、名前と数値を一緒に出力したり、メンバー数を数えたり、メニューを作成したり、LINQ でフィルタリングしたりできます。

反復処理を使うと、列挙型が増えてもメニューと検証処理が自動的に同期されます。

よくある質問

「列挙値の反復処理」レッスンは無料ですか?

はい。「列挙値の反復処理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。

「列挙値の反復処理」で何を学びますか?

Enum.GetValuesですべてのメンバーを列挙します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C# Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「列挙値の反復処理」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC# Academyレッスンでコードを書いて実行できますか?

はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 列挙型の定義と使用
  2. Flags列挙型とビット演算による組み合わせ
  3. 列挙型の変換と解析
  4. 列挙値の反復処理
← C# Academyに戻る