列挙値の反復処理
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フィードバックを取得できます。ローカル設定は不要です。