摘要:enum DaysOfWeek{Sunday, // 默认值为 0Monday, // 默认值为 1Tuesday,Wednesday,Thursday,Friday,Saturday}
C# 中的枚举类型(enum)是一种特殊的值类型,用于定义一组具名的常量。以下是枚举类型支持的特性和功能:
枚举类型用于定义一组固定的、具名的整型常量。默认情况下,枚举的基础类型是 int,但也可以显式指定其他整型类型。示例:
enum DaysOfWeek{Sunday, // 默认值为 0Monday, // 默认值为 1Tuesday,Wednesday,Thursday,Friday,Saturday}可以显式指定枚举的基础类型为任意整型(byte, sbyte, short, ushort, int, uint, long, ulong)。这允许控制枚举值的存储大小。示例:
enum Permissions : byte{Read = 1,Write = 2,Execute = 4}枚举的默认值是第一个定义的成员(其值通常是 0)。可以显式设置枚举值以覆盖默认值。示例:
enum OrderStatus{Pending = 0,Shipped = 1,Delivered = 2,Cancelled = -1}枚举类型提供了强类型支持,不能将其他整数值直接赋给枚举变量。必须进行显式类型转换。示例:
OrderStatus status = OrderStatus.Shipped; // 正确// status = 1; // 编译错误,需要显式转换status = (OrderStatus)1; // 正确,但需显式转换使用 [Flags] 特性修饰的枚举可以表示位域值,便于组合和操作。使用按位运算符(|, &, ~)来操作位域枚举。示例:
[Flags]enumFileAccess{None = 0,Read = 1,Write = 2,Execute = 4,ReadWrite = Read | Write // 组合值}// 示例用法FileAccess access = FileAccess.Read | FileAccess.Write;bool canRead = (access & FileAccess.Read) == FileAccess.Read; // true可以将枚举成员转换为整数值,或将整数值转换为枚举类型。通过 Enum.Parse 或 Enum.TryParse 将字符串转换为枚举值。示例:
int value = (int)OrderStatus.Shipped; // 转为整数:1OrderStatus status = (OrderStatus)value; // 转回枚举:OrderStatus.Shipped// 字符串转换OrderStatus parsedStatus = (OrderStatus)Enum.Parse(typeof(OrderStatus), "Delivered");bool success = Enum.TryParse("Cancelled", out OrderStatus result); // true使用 Enum.GetNames 和 Enum.GetValues 方法列出所有成员及其对应值。示例:
foreach (string name in Enum.GetNames(typeof(OrderStatus))){Console.WriteLine(name); // 输出成员名称}foreach (int value in Enum.GetValues(typeof(OrderStatus))){Console.WriteLine(value); // 输出成员值}枚举成员可以通过 ToString 获取名称。如果需要自定义表示,可以结合 DescriptionAttribute 或其他特性。示例:
OrderStatus status = OrderStatus.Shipped;Console.WriteLine(status.ToString); // 输出 "Shipped"枚举可以与 Nullable 一起使用,表示可能没有值。示例:
OrderStatus? status = null;if (status.HasValue){Console.WriteLine($"Status: {status.Value}");}可以直接比较两个枚举值。还可以使用比较运算符(==, , 等)。示例:
OrderStatus status1 = OrderStatus.Shipped;OrderStatus status2 = OrderStatus.Delivered;if (status1示例:
switch (status){case OrderStatus.Pending:Console.WriteLine("Order is pending.");break;case OrderStatus.Delivered:Console.WriteLine("Order is delivered.");break;default:Console.WriteLine("Unknown status.");break;}来源:面试八股文
免责声明:本站系转载,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!