0Pricing
C# Academy · 课时

枚举与 [Flags]

使用显式值和基础类型定义枚举,安全地进行转换和解析,并使用 [Flags] 表示可组合选项。

枚举与 [Flags] 是 CoddyKit 上的免费 C# Academy 课时。 这是第 3 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 3 节课。

枚举概览

目标:使用枚举表示命名常量,并使用 [Flags] 表示可组合的选项。

  • 名称映射到数字
  • 基础类型(默认为 int)
  • 转换、解析和验证
  • 使用按位运算与 [Flags] 组合

基本枚举

枚举是命名常量。您可以打印名称,也可以将其强制转换为基础数字。

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);
  }
}

底层类型与强制转换

您可以选择底层类型(短整型、字节型等)。从数字进行强制转换不会验证该值。

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);
  }
}

解析与验证

使用 枚举.TryParse 从文本中读取,并使用 枚举.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);
  }
}

标志特性的实际应用

添加 [标志] 并分配 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);
  }
}

枚举提示

提示:

  • 指定明确的值,并保持这些值稳定。
  • 对于 [标志],使用 2 的幂次值,并包含一个 无 = 0。
  • 使用 枚举.TryParse/IsDefined 验证输入。
  • 避免在公开接口中使用原始整数;请优先使用枚举。

标志特性的含义

快速检查:哪个特性可以让枚举表示可通过位运算组合的选项,例如读取 | 写入?

回顾

回顾:使用枚举表示清晰且类型安全的常量。安全地进行解析和验证。对于可组合的选项,添加 [标志],并使用位运算符设置、测试和移除标志。

常见问题解答

「枚举与 [Flags]」课时是免费的吗?

是的 — 「枚举与 [Flags]」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 3 节课。

「枚举与 [Flags]」这节课中我会学到什么?

使用显式值和基础类型定义枚举,安全地进行转换和解析,并使用 [Flags] 表示可组合选项。 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C# Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 3 节。

「枚举与 [Flags]」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C# Academy 课中编写并运行代码吗?

能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 结构体:值语义与不可变模式
  2. 记录式类型与基于值的相等性(模式)
  3. 枚举与 [Flags]
← 返回 C# Academy