C# enum枚举知识总结
C#中除了简单的变量类型外,还提供了三种较为复杂的变量类型,包括枚举、结构和数组。本文主要讲述枚举相关的知识。
枚举类型(也称为枚举),提供了一种有效的方式,来定义可能分配给变量的一组已命名的整数常量,使用enum关键字声明。
默认情况下,第一个枚举数的值为0,之后每个连续枚举数的值加1;若设置某一枚举数的值,之后的枚举数仍然按1递增。示例如下:
enum Day
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}; enum Number
{
One = ,
Two,
Three,
Eleven = ,
Twelve,
Thirteen
};
枚举中每个元素的基础类型都是int,可以使用冒号指明另一种整数类型。已批准的枚举类型有:byte、sbyte、short、ushort、int、uint、long、ulong
enum Month : byte
{
January,
February,
March,
April,
May,
June,
July,
August,
September,
October,
November,
December
};
枚举类型的枚举器列表中元素可以分配为任何值,同时也可以使用计算值
enum MachineState
{
PowerOff = ,
Running = ,
Sleeping = ,
Hibernating = Sleeping +
}
枚举相关的转换:
1.转换成整数
Day today = Day.Wednesday;
Console.WriteLine($"today is {today}"); int dayNumber = (int)today;
Console.WriteLine($"{today} is day number {dayNumber}"); Month month = Month.January;
byte monthNumber = (byte)month;
Console.WriteLine($"{month} is month number {monthNumber}");
输出: 
2.转换成字符串
string todayString = Convert.ToString(today);
Console.WriteLine($"Convert.ToString()方式: {todayString}"); string todayString2 = today.ToString();
Console.WriteLine($".ToString()方式:{todayString2}");
输出:

3.从字符串中获取枚举值
Enum.Parse()静态方法,带有3个参数。第一个参数是要使用的枚举类型,其语法是关键字typeof后跟放在括号中的枚举类名;第二个参数是要转换的字符串;第三个参数是一个bool值,指定在进行转换时是否忽略大小写。
string todayData = "Wednesday";
Day dayData = (Day)Enum.Parse(typeof(Day), todayData, true);
Console.WriteLine($"Enum.Parse()方法:{dayData}");
输出: 
3个方法: Enum.GetName() 、Enum.GetNames()、Enum.GetValues()
string name = Enum.GetName(typeof(Day), );
Console.WriteLine(name); Console.WriteLine("The names of the Day Enum are:");
foreach (string str in Enum.GetNames(typeof(Day)))
Console.Write(str + " ");
Console.WriteLine(); Console.WriteLine("The values of the Day Enum are:");
foreach (int value in Enum.GetValues(typeof(Day)))
Console.Write(value + " ");
Console.WriteLine();
输出:

枚举类型作为位标志:定义枚举时,添加Flags特性,之后便可以对这些值执行AND、OR、NOT、XOR按位运算
[Flags]
enum WeekDay
{
None = 0x00, //0000 0000
Sunday = 0x01, //0000 0001
Monday = 0x02, //0000 0010
Tuesday = 0x04, //0000 0100
Wednesday = 0x08, //0000 1000
Thursday = 0x10, //0001 0000
Friday = 0x20, //0010 0000
Saturday = 0x40 //0100 0000
}; [Flags]
public enum CarOptions
{
// The flag for SunRoof is 0001.
SunRoof = 0x01,
// The flag for Spoiler is 0010.
Spoiler = 0x02,
// The flag for FogLights is 0100.
FogLights = 0x04,
// The flag for TintedWindows is 1000.
TintedWindows = 0x08,
}
AND(&):判断是否包含该值;OR(|):组合;NOT(~):取反;XOR(^):去除其中一个值
CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;
Console.WriteLine(options);
Console.WriteLine((int)options); WeekDay meetingDays = WeekDay.Tuesday | WeekDay.Thursday;
meetingDays = meetingDays | WeekDay.Friday;
Console.WriteLine("Meeting days are {0}", meetingDays); meetingDays = meetingDays ^ WeekDay.Tuesday;
Console.WriteLine("Meeting days are {0}", meetingDays); bool test = (meetingDays & WeekDay.Thursday) == WeekDay.Thursday;
Console.WriteLine("Thursday {0} a meeting day.", test == true ? "is" : "is not");
输出:

注释掉[Flags]后,输出内容为:

参考文章:
https://www.cnblogs.com/williamwsj/p/6047884.html
https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/enum
https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/enumeration-types
C# enum枚举知识总结的更多相关文章
- Swift Enum 枚举
前言 枚举是一种自定义的数据类型,在 Swift 中枚举类型拥有相当高的自由度.在 Swift 语言中枚举是一级类型,它拥有在其他语言中只有类才拥有的一些特性,比如实例方法,实例构造器等. 枚举声明的 ...
- c# (ENUM)枚举组合类型的谷歌序列化Protobuf
c# (ENUM)枚举组合类型的谷歌序列化Protobuf,必须在序列化/反序列化时加上下面: RuntimeTypeModel.Default[typeof(Alarm)].EnumPassthru ...
- C#将Enum枚举映射到文本字符串
介绍 当将以前的C代码移植到C#中时,我快发疯了,因为有很多的数组需要将常量映射到字符串.当我在寻找一个C#的方法来完成的时候,我发现了一个自定义属性和映射的方法. 如何使用代码? 对每一个enum枚 ...
- MVC3不能正确识别JSON中的Enum枚举值
一.背景 在MVC3项目里,如果Action的参数中有Enum枚举作为对象属性的话,使用POST方法提交过来的JSON数据中的枚举值却无法正确被识别对应的枚举值. 二.Demo演示 为了说明问题,我使 ...
- 161208、Java enum 枚举还可以这么用
在大部分编程语言中,枚举类型都会是一种常用而又必不可少的数据类型,Java中当然也不会例外.然而,Java中的Enum枚举类型却有着许多你意想不到的用法,下面让我们一起来看看. 先来看一段代码示例: ...
- Python中模拟enum枚举类型的5种方法分享
这篇文章主要介绍了Python中模拟enum枚举类型的5种方法分享,本文直接给出实现代码,需要的朋友可以参考下 以下几种方法来模拟enum:(感觉方法一简单实用) 复制代码代码如下: # way1 ...
- java之enum枚举(2015年05月28日)
背景: 今天启动了一个新的项目,由于要从之前的旧项目中拿过来一些代码,所以就看了下公司之前项目代码,发现有定义的常量类,也有枚举类,然后就在想着两者的功能差不多,那他们之间到底有什么区别呢,所以就决定 ...
- 1.0 基础、标示符、常量、数据类型(enum 枚举,struct 结构体)、操作符、循环、数组
一.程序 现实生活中,程序是指完成某些事务的一种既定方法和过程,可以把程序看成是一系列动作执行过程的描述. 在计算机世界,程序是指令,即为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集 ...
- Enum枚举类|注解Annotation
Enum枚举类 ①枚举类和普通类的差别: 使用 enum 定义的枚举类默认继承了 java.lang.Enum 类 枚举类的构造器仅仅能使用 private 訪问控制符 枚举类的全部实例必须在枚举类中 ...
随机推荐
- np.random.choices的使用
在看莫烦python的RL源码时,他的DDPG记忆库Memory的实现是这样写的: class Memory(object): def __init__(self, capacity, dims): ...
- 【Centos】搭建 SVN 服务器
1.如果仅仅只是搭建 svn 服务器: (a).先检查 svn 是否已经安装了 rpm -qa subversion #输入这个命令后,会出现 subversion 版本号 (b).如果没有安装, ...
- 批量停止、删除docker容器
批量停止 根据NAMES停止所有容器 docker stop `docker ps | awk 'NR!=1{print $NF}'` 根据CONTAINER ID停止所有容器 docker stop ...
- python连接mysql数据库(MySQL)
在介绍python在数据库中的操作之前先简单介绍点mysql中的操作语言: [root@elk-server --]# mysql -u root -p Enter password: Welcome ...
- [spring]数据库的连接配置
使用druid数据源 ,并支持事务处理. <?xml version="1.0" encoding="UTF-8"?> <beans xmln ...
- vsftp配置详解
vsftpd作为一个主打安全的FTP服务器,有很多的选项设置.下面介绍了vsftpd的配置文件列表,而所有的配置都是基于vsftpd.conf这个配置文件的.本文将提供完整的vsftpd.conf的中 ...
- 阿里开源支持缓存线程池的ThreadLocal Transmittable ThreadLocal(TTL)
功能 在使用线程池等会缓存线程的组件情况下,提供ThreadLocal值的传递功能. JDK的InheritableThreadLocal类可以完成父子线程值的传递. 但对于使用线程池等会缓存线程的组 ...
- 操作TreeView(咏南工作室)
{*******************************************************}{ ...
- php错误机制总结
转 http://www.cnblogs.com/yjf512/p/5314345.html
- rest_framework之序列化组件
什么是rest_framework序列化? 在写前后端不分离的项目时: 我们有form组件帮我们去做数据校验 我们有模板语法,从数据库取出的queryset对象不需要人为去转格式 当我们写前后端分离项 ...