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

C# 枚 举(枚举)

枚举

枚举是由程序员定义的类型,与类或结构一样。

  • 与结构一样,枚举是值类型:因此直接存储它们的数据,而不是分开存储成引用和数据。
  • 枚举只有一种类型的成员:命名的整数值常量。
    下面的代码展示了一个示例,声明了一个名称为TrafficLight的新枚举类型,它含有3个成
    贝。注意成员声明列表是逗号分隔的列表,在枚举声明中没有分号。
enum TrafficLight
{Green,  //逗号分割,没有分号Yellow, //逗号分割,没有分号Red
}

每个枚举类型都有一个底层整数类型,默认为int。

  • 每个枚举成员都被赋予一个底层类型的常量值。
  • 在默认情况下,编译器对第一个成员赋值为0,对每一个后续成员赋的值都比前一个成员多1。

例如,在TrafficLight类型中,编译器把int值0、1和2分别赋值给成员Green、Yellow
和Red。在下面代码的输出中,把它们转换成类型int,可以看到底层的成员值。图12-1阐明了
它们在栈中的排列。

enum TrafficLight
{Green,  //逗号分割,没有分号Yellow, //逗号分割,没有分号Red
}TrafficLight t1=TrafficLight.Green;
TrafficLight t2=TrafficLight.Yellow;
TrafficLight t3=TrafficLight.Red;Console.WriteLine($"{t1},\t{(int)t1}");
Console.WriteLine($"{t2},\t{(int)t2}");
Console.WriteLine($"{t3},\t{(int )t3}");

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以把枚举值赋给枚举类型变量。例如,下面的代码展示了3个TrafficLight类型变量的声
明。注意可以把成员字面量赋给变量,或从另一个相同类型的变量复制值。

class Program
{enum TrafficLight{Green,  //逗号分割,没有分号Yellow, //逗号分割,没有分号Red}TrafficLight t1=TrafficLight.Green;TrafficLight t2=TrafficLight.Yellow;TrafficLight t3=TrafficLight.Red;Console.WriteLine(t1);Console.WriteLine(t2);Console.WriteLine(t3);
}

这段代码产生以下输出。注意,成员名被当作字符串打印。

设置底层类型和显式值

可以把冒号和类型名放在枚举名之后,这样就可以使用int以外的整数类型。类型可以是任
何整数类型。所有成员常量都属于枚举的底层类型。

enum TrafficLight:ulong
{...
}

成员常量的值可以是底层类型的任何值。要显式地设置一个成员的值,在枚举声明中的变量
名之后使用初始化表达式。尽管不能有重复的名称,但可以有重复的值,如下所示。

enum TrafficLight
{Green=10,Yellow=15,Red=5
}

例如,图12-2中的代码展示了枚举TrafficLight的两个等价声明。

  • 左边的代码接受默认的类型和编号。
  • 右边的代码显式地将底层类型设置为int,并将成员设置为与默认值相应的值。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/250135.html

相关文章:

  • [nginx]反向代理grpc
  • [技巧] 接口优化技巧合集
  • 数列求和计算
  • 人口贩卖暑期威胁消解:算法协同提升安全预警
  • 学习昇腾开发的第一天--环境配置
  • 技术实录-从 MySQL 启动失败到大小写兼容恢复:一次完整故障排查复盘20250614
  • Flask入门:从零搭建Python Web应用
  • Flink task、Operator 和 UDF 之间的关系
  • 【论文解读】OmegaPRM:MCTS驱动的自动化过程监督,赋能LLM数学推理新高度
  • [学习] 牛顿迭代法:从数学原理到实战
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | AnimatedNavigation(动态导航)
  • 【Spring源码核心篇-08】spring中配置类底层原理和源码实现
  • Vite 预构建机制深度解析(Vite缺点之一)
  • BeckHoff <--> Festo Cmmt AS驱动器 EtherCat通讯
  • C++基础算法————二分查找
  • JavaScript 事件循环
  • CH579 CH573 CH582 CH592 蓝牙主机(Central)实例应用讲解(二)——Central消息事件机制初探
  • Python学习笔记面向对象编程
  • 钉钉机器人-自定义卡片推送快速入门
  • keil一键烧录boot和app程序
  • jojojojojo
  • Hexo-butterfly友情链接页面优化
  • MySQL-DQL数据查询语句深度解析与实战指南
  • 保护地线与串扰-信号完整性分析
  • day 51 python打卡
  • Redis事务与驱动的学习(一)
  • Unity Demo-3DRaceCar详解
  • MiniCPM4端侧AI模型
  • final在java中的作用
  • 清理 Docker 容器日志文件方法