尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

C# 枚举(Enum)详解

C# 枚举(Enum)详解
📅 发布时间:2026/7/8 6:28:02

枚举(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);

输出:

3

2. 整数转枚举

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);

输出:

High

2. 字符串转枚举

string text = "Medium"; Level level = Enum.Parse<Level>(text); Console.WriteLine(level);

输出:

Medium

如果字符串可能错误:

string text="AAA"; 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 0100

2. 组合权限

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.Name="Tom"; p.State=PlayerState.Running;

十二、枚举与数据库设计

常见场景:

用户状态:

enum UserStatus { Normal=1, Disabled=2, Deleted=3 }

数据库:

IdStatus
11
22

代码:

UserStatus status = (UserStatus)reader["Status"];

优点:

数据库存数字:

1 2 3

代码显示:

Normal Disabled Deleted

十三、枚举常用方法

Enum.GetName()

获取名称:

string name = Enum.GetName(typeof(Level),2); Console.WriteLine(name);

输出:

Medium

Enum.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 的幂

正确:

Read=1 Write=2 Delete=4

错误:

Read=1 Write=2 Delete=3

因为:

3 = 1+2

会产生冲突。


十五、枚举和常量的区别

constenum
用途单个常量多个相关常量
类型任意整数类型
可读性一般高
组合不方便支持Flags

例如:

常量:

const int Red=1; const int Green=2;

枚举:

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 order=new Order(); order.Status=OrderStatus.Paid; if(order.Status==OrderStatus.Paid) { Console.WriteLine("订单已支付"); }

比:

if(status==2)

安全和易读很多。


总结

C# Enum 核心知识:

知识点说明
enum定义枚举
默认值从0开始
底层整数类型
转换强制转换
Parse字符串转枚举
TryParse安全转换
Flags多选状态
switch状态判断
数据库状态字段最佳选择

一句话总结:

枚举就是把一组有固定含义的数字,包装成可读、可维护、安全的类型,是 C# 中表示状态、权限、分类最常用的数据结构之一。

相关新闻

  • PyTorch HingeEmbeddingLoss 实战:3个代码示例解析 margin 参数对模型间隔的影响
  • redis-admin 网页版
  • 城通网盘直连解析技术深度解析:架构设计与实战应用

最新新闻

  • 【RT-DETR涨点改进】09 别再让注意力“瞎看”:RT-DETR中的稀疏注意力与显存优化实战
  • Poppins字体:完全免费的多语言几何字体,为你的设计增添国际范 [特殊字符]
  • 浏览器净化革命:用uBlock Origin告别网络干扰,重获清爽浏览体验
  • 性能测试进阶:从Jmeter脚本生成到全链路监控与面试知识体系构建
  • 湘美谈教育湘美书院谈邵阳文学,雪峰山绥宁散文四重奏
  • PLC控制气缸与电磁阀:从原理到实战的工业自动化指南

日新闻

  • PROPKA 3深度解析:蛋白质pKa预测的实战指南与算法原理
  • 微信小程序 globalData 监听:基于 Object.defineProperty 的 3 种实现方案对比
  • MySQL 8.0 数据清洗实战:3类异常值识别与 UPDATE/DELETE 批量处理

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号