当前位置: 首页 > 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.xdnf.cn/news/1036999.html

相关文章:

  • Python Day51
  • pyspark非安装使用graphframes
  • PHP+mysql雪里开轻量级报修系统 V1.0Beta
  • Laravel 从版本 5 到 12 每个版本都引入了一些新的特性、改进和弃用的功能
  • rt-thread的定时器驱动(裸机版本)记录.
  • Flutter JSON解析全攻略:使用json_serializable实现高效序列化
  • java设计模式[1]之设计模式概览
  • 免费电子印章生成工具,可在线设计印章
  • TLSF 内存分配器
  • 通达信跟老庄追涨停指标公式
  • 【大模型分布式训练】多卡解决单卡训练内存不足的问题
  • Python学习笔记面向对象编程
  • Python 中的 `lru_cache` 详解
  • 固件签名技术深度解析:HSM模块如何守护设备安全,CAS系统如何赋能产业升级
  • pytest的装饰器`pytest.mark.parametrize` 和 `@pytest.mark.smoke`区别
  • 中国电信天翼物联学习总结笔记:线上生成模型
  • 未来行业发展趋向
  • JavaScript 事件循环
  • 19 - SAFM模块
  • 27 - ASPP模块
  • 【redis——缓存雪崩(Cache Avalanche)】
  • 专注于PLC数据采集MES交互解决方案
  • 位运算详解之异或运算的奇妙操作
  • docker安装mysql数据库及简单使用
  • 鸿蒙NEXT-Data类型数据通过AppStore获取后找原本一样的数据(值一样)但是比较结果却为false
  • 关于cv::solvePnP算法的理解
  • Vue动态路由
  • 音频驱动数字人13款深度评测
  • leetcode_503 下一个更大元素
  • <11>-MySQL事务管理