列挙型と[Flags]
明示的な値と基底型を指定した列挙型を定義し、安全に変換と解析を行います。[Flags]で組み合わせ可能なオプションをモデル化します。
「列挙型と[Flags]」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン3/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全3レッスンが含まれています。
列挙型の概要
目標:名前付き定数には列挙型を使用し、組み合わせ可能なオプションには[Flags]を使用します。
- 名前は数値に対応します
- 基になる型(既定では int)
- キャスト、解析、検証
- [Flags] でビット単位に組み合わせます
基本的な enum
enum は名前付き定数です。名前を出力したり、基になる数値型にキャストしたりできます。
using System;
public enum OrderStatus
{
Pending = 0,
Processing = 1,
Shipped = 2,
Delivered = 3,
Cancelled = 4
}
public class Program
{
public static void Main(string[] args)
{
OrderStatus s = OrderStatus.Processing;
Console.WriteLine("Status = " + s);
Console.WriteLine("Numeric = " + (int)s);
}
}
基になる型とキャスト
基になる型(short、byte など)を選択できます。数値からのキャストでは、値の妥当性は検証されません。
using System;
// Choose underlying type if needed (default is int)
public enum HttpCode : short
{
Ok = 200,
NotFound = 404
}
public class Program
{
public static void Main(string[] args)
{
short code = (short)HttpCode.Ok; // cast to number
HttpCode fromNum = (HttpCode)404; // cast from number (no validation)
Console.WriteLine("code=" + code);
Console.WriteLine("fromNum=" + fromNum);
}
}
解析と検証
テキストから読み取るには Enum.TryParse を使用し、数値の値を検証するには Enum.IsDefined を使用します。
using System;
public enum Color
{
Red = 1, Green = 2, Blue = 3
}
public class Program
{
public static void Main(string[] args)
{
Color c;
bool ok = Enum.TryParse<Color>("green", true, out c); // ignore case
Console.WriteLine("Parsed? " + ok + " value=" + c);
// Validate a numeric value before casting
int raw = 4;
bool valid = Enum.IsDefined(typeof(Color), raw);
Console.WriteLine("Is 4 a defined Color? " + valid);
}
}
実践での [Flags]
[Flags] を追加し、2 の累乗の値を割り当てます。| で結合し、& でテストし、~ と & で削除します。
using System;
[Flags]
public enum FileAccessMode
{
None = 0,
Read = 1, // 0001
Write = 2, // 0010
Exec = 4 // 0100
}
public class Program
{
public static void Main(string[] args)
{
FileAccessMode m = FileAccessMode.Read | FileAccessMode.Write; // combine
Console.WriteLine("Mode = " + m); // prints "Read, Write"
// Test a flag (two common patterns)
bool canWrite = (m & FileAccessMode.Write) != 0;
Console.WriteLine("Can write? " + canWrite);
// Remove a flag
m = m & ~FileAccessMode.Write;
Console.WriteLine("After remove: " + m);
}
}
enum のヒント
ヒント:
- 値を明示的に指定し、安定させてください。
- [Flags] では 2 の累乗を使用し、None = 0 を含めてください。
- Enum.TryParse/IsDefined で入力を検証してください。
- パブリック API で生の整数を使用するのは避け、enum を使用してください。
Flags 属性の意味
まとめ
まとめ: 明確で型安全な定数には enum を使用します。安全に解析と検証を行います。組み合わせ可能なオプションには [Flags] を追加し、ビット演算子でフラグの設定、テスト、削除を行います。
よくある質問
「列挙型と[Flags]」レッスンは無料ですか?
はい。「列挙型と[Flags]」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全3レッスンが含まれています。
「列挙型と[Flags]」で何を学びますか?
明示的な値と基底型を指定した列挙型を定義し、安全に変換と解析を行います。[Flags]で組み合わせ可能なオプションをモデル化します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/3です。
「列挙型と[Flags]」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 構造体:値セマンティクスと不変パターン
- レコード風の型と値ベースの等価性(パターン)
- 列挙型と[Flags]