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 訪问控制符 枚举类的全部实例必须在枚举类中 ...
随机推荐
- python中文显示乱码,已经在开头有了coding: utf-8
乱码原因:因为你的文件声明为 utf-8,并且也应该是用 utf-8 的编码保存的源文件.但是 windows 的本地默认编码是 cp936,也就是 gbk 编码,所以在控制台直接打印 utf-8 的 ...
- python 中对象is和==是怎么比较的
Python中的对象包含三要素:id.type.value.其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值.is判断的是a对象是否就是b对象,是通过id来判断的.==判断的 ...
- python笔记6 模块与包 程序开发规范 包 re sys time os模块
模块与包 python 模块首引用加载到内存,如果再次引用此模块,直接从内存中读取. python文件分为:执行文件(解释器运行的文件),被引用文件(import) 模块引用一共发生了3件事: 1.他 ...
- 15 Flutter仿京东商城项目 搜索页面布局
Search.dart import 'package:flutter/material.dart'; import 'package:flutter_jdshop/services/ScreenAd ...
- mfc判断当前程序是否正在运行
HANDLE hMutex = CreateMutex(NULL,TRUE,_T("appName")); if(hMutex) { if(ERROR_ALREADY_EXISTS ...
- SpringBoot 2.x中为tomcat配置ssl(https)支持
参考来源:https://www.cnblogs.com/imfjj/p/9058443.html https://blog.csdn.net/jackymvc/article/details/810 ...
- AWK---linux系统三剑客(三)
grep .sed.awk被称为linux中的"三剑客". grep 更适合单纯的查找或匹配文本 sed 更适合编辑匹配到的文本 awk 更适合格式化文本,对文本进行较复杂格式 ...
- Docker三
将本地镜像发布到阿里云 有时候需要共享镜像或者习惯使用自己定义的镜像,可以注册私有仓库,国内推荐使用阿里云 步骤: 1.登录阿里云容器镜像服务:https://cr.console.aliyun.co ...
- spring中的ApplicationListener监听器
监听器在使用过程中可以监听到某一事件的发生,进而对事件做出相应的处理. 首先自定义一个监听器myListener实现ApplicationListener接口 @Repository public c ...
- 在C#中简单使用gRPC
一.引言 本文采用gRPC官方提供的一个教程例子,通过这个例子可以学习到在.proto文件中定义服务.使用protocol buffer编译器生成服务器和客户端代码.使用C#gRPC API为您的服务 ...