当前位置: 首页 > ai >正文

掌握C#枚举:从交通灯看懂状态管理

枚举(Enum)是C#中管理固定状态集合的利器,它像"魔法标签"将数字转化为可读性极强的语义化常量。今天通过交通灯案例,带你彻底吃透枚举!

🧩 一、枚举的本质特性

值类型核心

与结构体(struct)相同,枚举直接存储数据而非引用,内存高效无负担:

enum TrafficLight { Green, Yellow, Red } // 值类型声明 

成员唯一性约束

成员必须是整数值常量,逗号分隔且禁止分号:

// ✅ 正确写法(逗号分隔无分号)
enum Colors { Red, Green = 5, Blue }

🔢 二、底层运行机制

默认int类型

编译器自动分配整数值(从0开始递增):

TrafficLight.Green  // 实际值=0 
TrafficLight.Yellow // 实际值=1 
TrafficLight.Red    // 实际值=2 

值类型验证实验

var light = TrafficLight.Green;
Console.WriteLine($"状态:{light},数值:{(int)light}");
// 输出:状态:Green,数值:0 

⚙️ 三、高阶自定义技巧

更改底层类型

支持所有整数类型(byte/short等),节省内存:

enum Light : byte { Off, Low, High } // 底层byte类型 

显式赋值策略

自由设定初始值,允许重复数值:

enum Priority {Low = 10,     // 自定义起点 Medium = 15,  // 跳跃赋值 High = 10     // 允许值重复(慎用!)
}

🚦 四、实战交通灯系统

// 1. 声明枚举类型 
enum TrafficLight { Green, Yellow, Red }// 2. 创建状态变量 
var currentLight = TrafficLight.Green;// 3. 状态切换逻辑 
switch(currentLight) {case TrafficLight.Green:Console.WriteLine("通行"); break;case TrafficLight.Yellow:Console.WriteLine("减速"); break;case TrafficLight.Red:Console.WriteLine("停止"); break;
}

交通灯状态

💡 五、枚举核心价值总结

优势应用场景
语义化状态标识状态机(订单/工作流)
类型安全校验替代魔法数字(错误代码)
智能提示支持开发效率提升
内存占用优化嵌入式/高性能场景

最佳实践:优先使用枚举替代整数常量,让代码获得"自解释"的超能力!

http://www.xdnf.cn/news/14101.html

相关文章:

  • 项目拓展-Jol分析本地对象or缓存的内存占用
  • pdb/sdf转pdbqt错误、pdbqt小分子文件对接蛋白质dock分数为0
  • 基于Python学习《Head First设计模式》第十四章 剩下的模式
  • 算法C实现--第16章习题集-外部查找
  • 从事算法工作对算法刷题量的需求
  • 0到1案例演示 vue + axios 请求 springboot 的 restful 风格接口(前后端分离+跨域问题)
  • k8s的开篇学习和安装
  • 1.0 前言(Python系列教程)
  • 深入解析JVM字节码执行引擎
  • 基于GNU Radio Companion搭建的FM信号及数字通信
  • python: wxpython 4.2 开发一个邮件客户端,能编写邮件,发送邮件及附件
  • Ubuntu中Chromium无法使用Fcitx输入中文的问题
  • PySpark 使用pyarrow指定版本
  • cesium入门
  • 剖析电商搜索要点并基于Es+Redis模拟电商搜索行为
  • Flink task、Operator 和 UDF 之间的关系
  • 【系统分析师】2009年真题:案例分析-答案及详解
  • HQL 优化:从低效到高效的蜕变之旅
  • Python 函数
  • UE5反射系统分析(一)generated.h
  • 日本生活:日语语言学校-日语作文-沟通无国界(1)-题目:假装写日记
  • 【精选】计算机毕业设计SpringBoot车辆保险理赔平台 保险登记 出险申报 理赔审核进度管理系统源码+论文+PPT+讲解
  • 拆解 CMS/G1/ZGC 三种垃圾回收器算法过程
  • 228永磁同步电机无速度算法--基于双重锁相环的滑模观测器
  • 【FineDance】ModuleNotFoundError: No module named ‘pytorch3d‘
  • 时间序列数据库技术深度解析:核心原理与最佳实践
  • Windows安装部署jenkins
  • YOLOv8分类的三种C++实现:opencv dnn/libtorch/onnxruntime
  • 【编译原理】第九章 运行时存储
  • 2025-06-14【视觉】批量筛选图集中包含某种物体对象的方法