C# 中的枚举类型⽀持哪些特性和功能?

360影视 2025-01-29 14:03 2

摘要: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;}

来源:面试八股文

相关推荐