C# 枚举(Enum)详解

发布时间:2026/7/8 6:27:14

C# 枚举(Enum)详解 枚举Enumeration简称Enum是 C# 中一种值类型用于表示一组固定的、具有明确含义的常量集合。简单来说枚举 给一组整数值起有意义的名字例如不用枚举int status 1; if (status 1) { Console.WriteLine(运行中); }问题1 代表什么别人不知道代码可读性差容易写错使用枚举Status status Status.Running; if (status Status.Running) { Console.WriteLine(运行中); }代码更加清晰。一、枚举的基本语法1. 定义枚举语法enum 枚举名 { 成员1, 成员2, 成员3 }示例enum WeekDay { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }使用WeekDay today WeekDay.Monday; Console.WriteLine(today);输出Monday二、枚举底层原理枚举本质上是整数类型。例如enum Color { Red, Green, Blue }编译后类似Red 0 Green 1 Blue 2默认从0 开始递增。等价于Console.WriteLine((int)Color.Red);输出0三、指定枚举值可以手动指定值enum ErrorCode { Success 200, NotFound 404, ServerError 500 }使用int code (int)ErrorCode.NotFound; Console.WriteLine(code);输出404四、枚举值可以重复例如enum Status { OK 1, Success 1, Failed 2 }这里Status.OK和Status.Success实际上都是1允许存在。五、枚举的类型转换1. 枚举转整数显式转换enum Level { Low 1, Medium 2, High 3 } Level level Level.High; int value (int)level; Console.WriteLine(value);输出32. 整数转枚举int value 2; Level level (Level)value; Console.WriteLine(level);输出Medium注意如果数字不存在Level level (Level)100; Console.WriteLine(level);输出100不会报错。所以转换前最好检查if(Enum.IsDefined(typeof(Level),100)) { Level level(Level)100; }六、枚举与字符串转换1. 枚举转字符串Level level Level.High; string text level.ToString(); Console.WriteLine(text);输出High2. 字符串转枚举string text Medium; Level level Enum.ParseLevel(text); Console.WriteLine(level);输出Medium如果字符串可能错误string textAAA; if(Enum.TryParse(text,out Level level)) { Console.WriteLine(level); } else { Console.WriteLine(无效值); }七、枚举遍历使用foreach(Level item in Enum.GetValues(typeof(Level))) { Console.WriteLine(item); }输出Low Medium High八、枚举判断例如enum UserRole { Guest, User, Admin }判断UserRole role UserRole.Admin; if(role UserRole.Admin) { Console.WriteLine(管理员); }九、Flags 枚举位枚举这是 C# 枚举非常重要的高级用法。普通枚举enum Permission { Read, Write, Delete }只能表示一种状态。例如用户同时拥有读取 写入怎么办使用 Flags。1. 定义 Flags 枚举[Flags] enum Permission { None 0, Read 1, Write 2, Delete 4 }这里使用二进制Read 0001 Write 0010 Delete 01002. 组合权限Permission userPermission Permission.Read | Permission.Write;结果0011表示读取 写入3. 判断权限if((userPermission Permission.Read) Permission.Read) { Console.WriteLine(有读取权限); }4. 添加权限userPermission | Permission.Delete;5. 删除权限userPermission ~Permission.Write;十、枚举作为 switch 条件枚举最常见用途enum Operation { Add, Subtract, Multiply } Operation op Operation.Add; switch(op) { case Operation.Add: Console.WriteLine(加法); break; case Operation.Subtract: Console.WriteLine(减法); break; case Operation.Multiply: Console.WriteLine(乘法); break; }十一、枚举在类中的使用例如class Player { public string Name {get;set;} public PlayerState State {get;set;} } enum PlayerState { Idle, Running, Dead }使用Player p new Player(); p.NameTom; p.StatePlayerState.Running;十二、枚举与数据库设计常见场景用户状态enum UserStatus { Normal1, Disabled2, Deleted3 }数据库IdStatus1122代码UserStatus status (UserStatus)reader[Status];优点数据库存数字1 2 3代码显示Normal Disabled Deleted十三、枚举常用方法Enum.GetName()获取名称string name Enum.GetName(typeof(Level),2); Console.WriteLine(name);输出MediumEnum.IsDefined()判断是否存在bool result Enum.IsDefined(typeof(Level),3);Enum.GetValues()获取所有值Array values Enum.GetValues(typeof(Level));Enum.GetNames()获取所有名称string[] names Enum.GetNames(typeof(Level));十四、枚举最佳实践1. 使用复数命名推荐推荐enum Colors { }或者enum UserStatus { }不推荐enum ColorType { }2. 明确指定业务值不要enum Status { Normal, Disabled }因为以后添加成员可能改变编号。推荐enum Status { Normal 1, Disabled 2 }3. Flags 必须使用 2 的幂正确Read1 Write2 Delete4错误Read1 Write2 Delete3因为3 12会产生冲突。十五、枚举和常量的区别constenum用途单个常量多个相关常量类型任意整数类型可读性一般高组合不方便支持Flags例如常量const int Red1; const int Green2;枚举enum Color { Red, Green }明显枚举更适合。十六、实际项目案例订单状态public enum OrderStatus { Created 1, Paid 2, Shipping 3, Completed 4, Cancelled 5 }订单类public class Order { public int Id {get;set;} public OrderStatus Status {get;set;} }业务Order ordernew Order(); order.StatusOrderStatus.Paid; if(order.StatusOrderStatus.Paid) { Console.WriteLine(订单已支付); }比if(status2)安全和易读很多。总结C# Enum 核心知识知识点说明enum定义枚举默认值从0开始底层整数类型转换强制转换Parse字符串转枚举TryParse安全转换Flags多选状态switch状态判断数据库状态字段最佳选择一句话总结枚举就是把一组有固定含义的数字包装成可读、可维护、安全的类型是 C# 中表示状态、权限、分类最常用的数据结构之一。

相关新闻