C#——枚举类型

╰半夏微凉° 2022-11-19 12:53 349阅读 0赞

C#——枚举类型

枚举类型 是由基础整型数值类型的一组命名常量定义的值类型。 若要定义枚举类型,请使用 enum 关键字并指定枚举成员 的名称:

  1. enum Season
  2. {
  3. Spring,
  4. Summer,
  5. Autumn,
  6. Winter
  7. }

默认情况下,枚举成员的关联常数值为类型 int;它们从零开始,并按定义文本顺序递增 1。 可以显式指定任何其他整数数值类型作为枚举类型的基础类型。 还可以显式指定关联的常数值,如下面的示例所示:

  1. enum ErrorCode : ushort
  2. {
  3. None = 0,
  4. Unknown = 1,
  5. ConnectionLost = 100,
  6. OutlierReading = 200
  7. }

不能在枚举类型的定义内定义方法。 若要向枚举类型添加功能,请创建扩展方法。

枚举类型 E 的默认值是由表达式 (E)0 生成的值,即使零没有相应的枚举成员也是如此。

可以使用枚举类型,通过一组互斥值或选项组合来表示选项。 若要表示选项组合,请将枚举类型定义为位标志。

作为位标志的枚举类型

如果希望枚举类型表示选项组合,请为这些选项定义枚举成员,以便单个选项成为位字段。 也就是说,这些枚举成员的关联值应该是 2 的幂。 然后,可以使用按位逻辑运算符|或 & 分别合并选项或交叉组合选项。 若要指示枚举类型声明位字段,请对其应用 Flags 属性。 如下面的示例所示,还可以在枚举类型的定义中包含一些典型组合。

  1. [Flags]
  2. public enum Days
  3. {
  4. None = 0b_0000_0000, // 0
  5. Monday = 0b_0000_0001, // 1
  6. Tuesday = 0b_0000_0010, // 2
  7. Wednesday = 0b_0000_0100, // 4
  8. Thursday = 0b_0000_1000, // 8
  9. Friday = 0b_0001_0000, // 16
  10. Saturday = 0b_0010_0000, // 32
  11. Sunday = 0b_0100_0000, // 64
  12. Weekend = Saturday | Sunday
  13. }
  14. public class FlagsEnumExample
  15. {
  16. public static void Main()
  17. {
  18. Days meetingDays = Days.Monday | Days.Wednesday | Days.Friday;
  19. Console.WriteLine(meetingDays);
  20. // Output:
  21. // Monday, Wednesday, Friday
  22. Days workingFromHomeDays = Days.Thursday | Days.Friday;
  23. Console.WriteLine($"Join a meeting by phone on {meetingDays & workingFromHomeDays}");
  24. // Output:
  25. // Join a meeting by phone on Friday
  26. bool isMeetingOnTuesday = (meetingDays & Days.Tuesday) == Days.Tuesday;
  27. Console.WriteLine($"Is there a meeting on Tuesday: {isMeetingOnTuesday}");
  28. // Output:
  29. // Is there a meeting on Tuesday: False
  30. var a = (Days)37;
  31. Console.WriteLine(a);
  32. // Output:
  33. // Monday, Wednesday, Saturday
  34. }
  35. }

System.Enum 类型和枚举约束

System.Enum 类型是所有枚举类型的抽象基类。 它提供多种方法来获取有关枚举类型及其值的信息。

从 C# 7.3 开始,你可以在基类约束中使用 System.Enum(称为枚举约束),以指定类型参数为枚举类型。 所有枚举类型也都满足 struct 约束,此约束用于指定类型参数为不可为 null 的值类型。

转换

对于任何枚举类型,枚举类型与其基础整型类型之间存在显式转换。 如果将枚举值转换为其基础类型,则结果为枚举成员的关联整数值。

  1. public enum Season
  2. {
  3. Spring,
  4. Summer,
  5. Autumn,
  6. Winter
  7. }
  8. public class EnumConversionExample
  9. {
  10. public static void Main()
  11. {
  12. Season a = Season.Autumn;
  13. Console.WriteLine($"Integral value of {a} is {(int)a}"); // output: Integral value of Autumn is 2
  14. var b = (Season)1;
  15. Console.WriteLine(b); // output: Summer
  16. var c = (Season)4;
  17. Console.WriteLine(c); // output: 4
  18. }
  19. }

使用 Enum.IsDefined 方法来确定枚举类型是否包含具有特定关联值的枚举成员。

对于任何枚举类型,都存在分别与 System.Enum 类型的装箱和取消装箱相互转换。

发表评论

表情:
评论列表 (有 0 条评论,349人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++ 类型详解

    C++ 枚举类型详解 枚举类型是C++中的一种数据类型,它允许程序员定义一个包含固定数量的命名常量列表。枚举类型通常被用来代替整型常量,以便增强代码的可读性和可维护性。在本文

    相关 C#——类型

    C\——枚举类型 枚举类型 是由基础整型数值类型的一组命名常量定义的值类型。 若要定义枚举类型,请使用 enum 关键字并指定枚举成员 的名称: enum Se

    相关 C#——类型

    C\——枚举类型 枚举类型 是由基础整型数值类型的一组命名常量定义的值类型。 若要定义枚举类型,请使用 enum 关键字并指定枚举成员 的名称: enum Se

    相关 C# 类型 Enum

    枚举作用 1. 【统一】规范数据名称,让程序员【调用】数据名称,而非自己编写数据名称。 2. 耦合性高,扩展性差。修改数据只需要在枚举中修改,就可以影响全局的枚举值。