0Pricing
C# Academy · レッスン

列挙型と[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 属性の意味

確認問題: Read | Write のように、組み合わせ可能なビット単位のオプションを enum で表せるようにする属性はどれですか?

まとめ

まとめ: 明確で型安全な定数には 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フィードバックを取得できます。ローカル設定は不要です。

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

  1. 構造体:値セマンティクスと不変パターン
  2. レコード風の型と値ベースの等価性(パターン)
  3. 列挙型と[Flags]
← C# Academyに戻る