枚举Enums

本文内容

枚举类型是包含一组已命名常量的独特值类型。需要定义包含一组离散值的类型时,可以定义枚举。枚举使用一种整型值类型作为其基础存储,并提供离散值的语义含义。

以下示例声明并使用名为“Color”的 enum 类型,其中包含三个常量值(RedGreenBlue)。

  1. using System;
  2. enum Color
  3. {
  4. Red,
  5. Green,
  6. Blue
  7. }
  8. class EnumExample
  9. {
  10. static void PrintColor(Color color)
  11. {
  12. switch (color)
  13. {
  14. case Color.Red:
  15. Console.WriteLine("Red");
  16. break;
  17. case Color.Green:
  18. Console.WriteLine("Green");
  19. break;
  20. case Color.Blue:
  21. Console.WriteLine("Blue");
  22. break;
  23. default:
  24. Console.WriteLine("Unknown color");
  25. break;
  26. }
  27. }
  28. static void Main()
  29. {
  30. Color c = Color.Red;
  31. PrintColor(c);
  32. PrintColor(Color.Blue);
  33. }
  34. }

每个 enum 类型都有对应的整型类型(称为 enum 类型的基础类型)。如果 enum 类型未显式声明基础类型,则基础类型为 intenum 类型的存储格式和可取值范围由基础类型决定。enum 类型需要使用的一组值不受其 enum 成员限制。尤其是,基础类型的 enum 的任何值都可以显式转换成 enum 类型,并作为 enum 类型的不同有效值。

以下示例声明基础类型为 sbyte 且名为“Alignment”的 enum 类型。

  1. enum Alignment: sbyte
  2. {
  3. Left = -1,
  4. Center = 0,
  5. Right = 1
  6. }

如上面的示例所示,enum 成员声明可以包含用于指定成员值的常数表达式。每个 enum 成员的常量值都必须介于 enum 的基础类型范围内。如果 enum 成员声明未显式指定值,那么会为成员指定值 0(如果是 enum 类型中的首个成员)或原文前一个 enum 成员的值加 1。

可使用类型显式转换功能将 Enum 值转换成整型值,反之亦然。例如:

  1. int i = (int)Color.Blue; // int i = 2;
  2. Color c = (Color)2; // Color c = Color.Blue;

任何 enum 类型的默认值都是已转换成 enum 类型的整型值 0。如果变量被自动初始化为默认值,这就是为 enum 类型的变量指定的值。为了让 enum 类型的默认值可供方便使用,文本类型 0 隐式转换成任意 enum 类型。因此,可以运行以下命令。

  1. Color c = 0;