[C#1] 7-枚举
时间:2022-04-23
本文章向大家介绍[C#1] 7-枚举,主要内容包括1.Enum、2.位标记、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
1.Enum
枚举是定义了一组符号名称和数值对,如下:
1 //byte、sbyte、short、ushort、int、uint、long 或 ulong
2 enum Color : byte //默认是int
3 {
4 Red,//默认赋值为0
5 Yellow,//默认赋值为1
6 Blue,//默认赋值为2
7 }
枚举类型使程序更见容易阅读、编写和维护。每个枚举类型默认继承自 System.Enum,属于值类型,但是枚举不能定义任何方法、属性[本质 也是方法嘛]和事件。实际上枚举被编译时会把其中的每个符号转变为类型的一个常量字段,也就是0,1,2...会被硬编码进去。 而使用这些常量[0,1...]是以定义的字符代替的,以下是IL:
Blue项的IL:
.field public static literal valuetype ConsoleApplication1.Color Blue = uint8(0x02)
注意这个uint8,这个和上面写的Color:byte中的byte对应。这是枚举类型的基础类型每一个枚举都有一个基础类型[只可以是基元类型],C#默认是int。 Enum的静态方法Enum.GetUnderlyingType(Type enumType)返回枚举的基础类型。一些常用的方法:
1 Color myc = Color.Blue;
2 //ToString方法的格式化参数
3 Console.WriteLine(myc.ToString());//"Blue"常规格式
4 Console.WriteLine(myc.ToString("G"));//"Blue"常规格式
5 Console.WriteLine(myc.ToString("D"));//"2"十进制格式
6 Console.WriteLine(myc.ToString("X"));//"02"十六进制格式
7
8 //将一个文本符号转化为枚举类型的实例:
9 Color c = (Color)Enum.Parse(typeof(Color), "Blue");
10
11 //返回一个枚举类型的中定义的所有符号:
12 Color[] myColorArray = (Color[])Enum.GetValues(typeof(Color));
13
14 //返回一个枚举类型中每个符号的字符串形式组成的数据;
15 string[] myStrArray = Enum.GetNames(typeof(Color));
16
17 //判定指定的一个数值是否位于指定枚举中
18 Console.WriteLine(Enum.IsDefined(typeof(Color),"Green"));//输出False
19 //第二个参数是object类型的,一般是写字符,或者基础类型的数值
2.位标记
System.FlagsAttribute特性,位标记可以是枚举表示一组标记,把上述Color代码改写成如下:
1 [Flags]
2 enum Color : byte
3 {
4 Red = 1,//2的次方...
5 Yellow = 2,
6 Blue = 4,
7 }
[Flags]特性会使得枚举支持&|运算。也会影响ToString方法的输出行为。
Color c = Color.Blue | Color.Yellow;
Console.WriteLine(c);//输出Yellow,Blue
//我们并没有定义基础类型值为3的符号
Color c = (Color)Enum.Parse(typeof(Color), "3");
//输出Red,Yellow
Console.WriteLine(c);
- 51Nod 1090 3个数和为0(暴力)
- qscoj 128 喵哈哈村的魔法源泉(2)(模仿快速幂,好题)
- POJ 3624 Charm Bracelet(01背包裸题)
- 2015 计蒜之道 初赛(4)爱奇艺的自制节目(枚举 贪心)
- Codeforces 810C Do you want a date?(数学,前缀和)
- [快学Python3]数据结构-堆栈
- [快学Python3]PyMySQL库
- [快学Python3]SMTP发送邮件
- Educational Codeforces Round 21 D.Array Division(二分)
- Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2)(A.暴力,B.优先队列,C.dp乱搞)
- [libvirt][nginx]libvirt文档访问速度提高的小技巧
- 图论----同构图(详解)
- 基数排序与桶排序,计数排序【详解】
- SG函数和SG定理【详解】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux atop监控
- go modules中使用replace用法
- 分布式文件系统Ceph的挂载方式
- 在CentOS 7上挂载CephFS
- Qt音视频开发14-mpv读取和控制
- 深入理解Nginx的rewrite模块
- max os 安装各种问题/Error解决方法
- 不要启用 net.ipv4.tcp_tw_recycle
- 利用SSH(无密码)免登录来节省你的生命
- 深入linux下磁盘Disk,分区Partition,挂载Mount
- 净化Git之rebase变基的使用
- Linux内存管理 一个进程究竟占用多少空间?-VSS/RSS/PSS/USS
- Bash:选择结构之case
- ElasticSearch的Reindex
- 10行Python代码自动清理电脑内重复文件,解放双手!