枚举类型 | 您所在的位置:网站首页 › 枚举成员可以赋值负数吗 › 枚举类型 |
枚举类型(C# 参考)
项目04/07/2023
枚举类型 是由基础整型数值类型的一组命名常量定义的值类型。 若要定义枚举类型,请使用 enum 关键字并指定枚举成员 的名称: enum Season { Spring, Summer, Autumn, Winter }默认情况下,枚举成员的关联常数值为类型 int;它们从零开始,并按定义文本顺序递增 1。 可以显式指定任何其他整数数值类型作为枚举类型的基础类型。 还可以显式指定关联的常数值,如下面的示例所示: enum ErrorCode : ushort { None = 0, Unknown = 1, ConnectionLost = 100, OutlierReading = 200 }不能在枚举类型的定义内定义方法。 若要向枚举类型添加功能,请创建扩展方法。 枚举类型 E 的默认值是由表达式 (E)0 生成的值,即使零没有相应的枚举成员也是如此。 可以使用枚举类型,通过一组互斥值或选项组合来表示选项。 若要表示选项组合,请将枚举类型定义为位标志。 作为位标志的枚举类型如果希望枚举类型表示选项组合,请为这些选项定义枚举成员,以便单个选项成为位字段。 也就是说,这些枚举成员的关联值应该是 2 的幂。 然后,可以使用按位逻辑运算符|或 & 分别合并选项或交叉组合选项。 若要指示枚举类型声明位字段,请对其应用 Flags 属性。 如下面的示例所示,还可以在枚举类型的定义中包含一些典型组合。 [Flags] public enum Days { None = 0b_0000_0000, // 0 Monday = 0b_0000_0001, // 1 Tuesday = 0b_0000_0010, // 2 Wednesday = 0b_0000_0100, // 4 Thursday = 0b_0000_1000, // 8 Friday = 0b_0001_0000, // 16 Saturday = 0b_0010_0000, // 32 Sunday = 0b_0100_0000, // 64 Weekend = Saturday | Sunday } public class FlagsEnumExample { public static void Main() { Days meetingDays = Days.Monday | Days.Wednesday | Days.Friday; Console.WriteLine(meetingDays); // Output: // Monday, Wednesday, Friday Days workingFromHomeDays = Days.Thursday | Days.Friday; Console.WriteLine($"Join a meeting by phone on {meetingDays & workingFromHomeDays}"); // Output: // Join a meeting by phone on Friday bool isMeetingOnTuesday = (meetingDays & Days.Tuesday) == Days.Tuesday; Console.WriteLine($"Is there a meeting on Tuesday: {isMeetingOnTuesday}"); // Output: // Is there a meeting on Tuesday: False var a = (Days)37; Console.WriteLine(a); // Output: // Monday, Wednesday, Saturday } }有关详细信息和示例,请参阅 System.FlagsAttribute API 参考页和 System.Enum API 参考页的非独占成员和 Flags 属性部分。 System.Enum 类型和枚举约束System.Enum 类型是所有枚举类型的抽象基类。 它提供多种方法来获取有关枚举类型及其值的信息。 有关更多信息和示例,请参阅 System.Enum API 参考页。 可在基类约束中使用 System.Enum(称为枚举约束),以指定类型参数为枚举类型。 所有枚举类型也都满足 struct 约束,此约束用于指定类型参数为不可为 null 的值类型。 转换对于任何枚举类型,枚举类型与其基础整型类型之间存在显式转换。 如果将枚举值转换为其基础类型,则结果为枚举成员的关联整数值。 public enum Season { Spring, Summer, Autumn, Winter } public class EnumConversionExample { public static void Main() { Season a = Season.Autumn; Console.WriteLine($"Integral value of {a} is {(int)a}"); // output: Integral value of Autumn is 2 var b = (Season)1; Console.WriteLine(b); // output: Summer var c = (Season)4; Console.WriteLine(c); // output: 4 } }使用 Enum.IsDefined 方法来确定枚举类型是否包含具有特定关联值的枚举成员。 对于任何枚举类型,都存在分别与 System.Enum 类型的装箱和取消装箱相互转换。 C# 语言规范有关更多信息,请参阅 C# 语言规范的以下部分: 枚举 枚举值和操作 枚举逻辑运算符 枚举比较运算符 显式枚举转换 隐式枚举转换 另请参阅 枚举格式字符串 设计准则 - 枚举设计 设计准则 - 枚举命名约定 switch表达式 switch 语句 |
CopyRight 2018-2019 实验室设备网 版权所有 |