C#中除了简单的变量类型外,还提供了三种较为复杂的变量类型,包括枚举、结构和数组。本文主要讲述枚举相关的知识。

枚举类型(也称为枚举),提供了一种有效的方式,来定义可能分配给变量的一组已命名的整数常量,使用enum关键字声明。

默认情况下,第一个枚举数的值为0,之后每个连续枚举数的值加1;若设置某一枚举数的值,之后的枚举数仍然按1递增。示例如下:

  1. enum Day
  2. {
  3. Sunday,
  4. Monday,
  5. Tuesday,
  6. Wednesday,
  7. Thursday,
  8. Friday,
  9. Saturday
  10. };
  11.  
  12. enum Number
  13. {
  14. One = ,
  15. Two,
  16. Three,
  17. Eleven = ,
  18. Twelve,
  19. Thirteen
  20. };

枚举中每个元素的基础类型都是int,可以使用冒号指明另一种整数类型。已批准的枚举类型有:byte、sbyte、short、ushort、int、uint、long、ulong

  1. enum Month : byte
  2. {
  3. January,
  4. February,
  5. March,
  6. April,
  7. May,
  8. June,
  9. July,
  10. August,
  11. September,
  12. October,
  13. November,
  14. December
  15. };

枚举类型的枚举器列表中元素可以分配为任何值,同时也可以使用计算值

  1. enum MachineState
  2. {
  3. PowerOff = ,
  4. Running = ,
  5. Sleeping = ,
  6. Hibernating = Sleeping +
  7. }

枚举相关的转换:

1.转换成整数

  1. Day today = Day.Wednesday;
  2. Console.WriteLine($"today is {today}");
  3.  
  4. int dayNumber = (int)today;
  5. Console.WriteLine($"{today} is day number {dayNumber}");
  6.  
  7. Month month = Month.January;
  8. byte monthNumber = (byte)month;
  9. Console.WriteLine($"{month} is month number {monthNumber}");

输出:       

2.转换成字符串

  1. string todayString = Convert.ToString(today);
  2. Console.WriteLine($"Convert.ToString()方式: {todayString}");
  3.  
  4. string todayString2 = today.ToString();
  5. Console.WriteLine($".ToString()方式:{todayString2}");

输出:

3.从字符串中获取枚举值

Enum.Parse()静态方法,带有3个参数。第一个参数是要使用的枚举类型,其语法是关键字typeof后跟放在括号中的枚举类名;第二个参数是要转换的字符串;第三个参数是一个bool值,指定在进行转换时是否忽略大小写。

  1. string todayData = "Wednesday";
  2. Day dayData = (Day)Enum.Parse(typeof(Day), todayData, true);
  3. Console.WriteLine($"Enum.Parse()方法:{dayData}");

输出:      

3个方法: Enum.GetName() 、Enum.GetNames()、Enum.GetValues()

  1. string name = Enum.GetName(typeof(Day), );
  2. Console.WriteLine(name);
  3.  
  4. Console.WriteLine("The names of the Day Enum are:");
  5. foreach (string str in Enum.GetNames(typeof(Day)))
  6. Console.Write(str + " ");
  7. Console.WriteLine();
  8.  
  9. Console.WriteLine("The values of the Day Enum are:");
  10. foreach (int value in Enum.GetValues(typeof(Day)))
  11. Console.Write(value + " ");
  12. Console.WriteLine();

输出:

枚举类型作为位标志:定义枚举时,添加Flags特性,之后便可以对这些值执行AND、OR、NOT、XOR按位运算

  1. [Flags]
  2. enum WeekDay
  3. {
  4. None = 0x00, //0000 0000
  5. Sunday = 0x01, //0000 0001
  6. Monday = 0x02, //0000 0010
  7. Tuesday = 0x04, //0000 0100
  8. Wednesday = 0x08, //0000 1000
  9. Thursday = 0x10, //0001 0000
  10. Friday = 0x20, //0010 0000
  11. Saturday = 0x40 //0100 0000
  12. };
  13.  
  14. [Flags]
  15. public enum CarOptions
  16. {
  17. // The flag for SunRoof is 0001.
  18. SunRoof = 0x01,
  19. // The flag for Spoiler is 0010.
  20. Spoiler = 0x02,
  21. // The flag for FogLights is 0100.
  22. FogLights = 0x04,
  23. // The flag for TintedWindows is 1000.
  24. TintedWindows = 0x08,
  25. }

AND(&):判断是否包含该值;OR(|):组合;NOT(~):取反;XOR(^):去除其中一个值

  1. CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;
  2. Console.WriteLine(options);
  3. Console.WriteLine((int)options);
  4.  
  5. WeekDay meetingDays = WeekDay.Tuesday | WeekDay.Thursday;
  6. meetingDays = meetingDays | WeekDay.Friday;
  7. Console.WriteLine("Meeting days are {0}", meetingDays);
  8.  
  9. meetingDays = meetingDays ^ WeekDay.Tuesday;
  10. Console.WriteLine("Meeting days are {0}", meetingDays);
  11.  
  12. bool test = (meetingDays & WeekDay.Thursday) == WeekDay.Thursday;
  13. 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枚举知识总结的更多相关文章

  1. Swift Enum 枚举

    前言 枚举是一种自定义的数据类型,在 Swift 中枚举类型拥有相当高的自由度.在 Swift 语言中枚举是一级类型,它拥有在其他语言中只有类才拥有的一些特性,比如实例方法,实例构造器等. 枚举声明的 ...

  2. c# (ENUM)枚举组合类型的谷歌序列化Protobuf

    c# (ENUM)枚举组合类型的谷歌序列化Protobuf,必须在序列化/反序列化时加上下面: RuntimeTypeModel.Default[typeof(Alarm)].EnumPassthru ...

  3. C#将Enum枚举映射到文本字符串

    介绍 当将以前的C代码移植到C#中时,我快发疯了,因为有很多的数组需要将常量映射到字符串.当我在寻找一个C#的方法来完成的时候,我发现了一个自定义属性和映射的方法. 如何使用代码? 对每一个enum枚 ...

  4. MVC3不能正确识别JSON中的Enum枚举值

    一.背景 在MVC3项目里,如果Action的参数中有Enum枚举作为对象属性的话,使用POST方法提交过来的JSON数据中的枚举值却无法正确被识别对应的枚举值. 二.Demo演示 为了说明问题,我使 ...

  5. 161208、Java enum 枚举还可以这么用

    在大部分编程语言中,枚举类型都会是一种常用而又必不可少的数据类型,Java中当然也不会例外.然而,Java中的Enum枚举类型却有着许多你意想不到的用法,下面让我们一起来看看. 先来看一段代码示例: ...

  6. Python中模拟enum枚举类型的5种方法分享

    这篇文章主要介绍了Python中模拟enum枚举类型的5种方法分享,本文直接给出实现代码,需要的朋友可以参考下   以下几种方法来模拟enum:(感觉方法一简单实用) 复制代码代码如下: # way1 ...

  7. java之enum枚举(2015年05月28日)

    背景: 今天启动了一个新的项目,由于要从之前的旧项目中拿过来一些代码,所以就看了下公司之前项目代码,发现有定义的常量类,也有枚举类,然后就在想着两者的功能差不多,那他们之间到底有什么区别呢,所以就决定 ...

  8. 1.0 基础、标示符、常量、数据类型(enum 枚举,struct 结构体)、操作符、循环、数组

    一.程序 现实生活中,程序是指完成某些事务的一种既定方法和过程,可以把程序看成是一系列动作执行过程的描述. 在计算机世界,程序是指令,即为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集 ...

  9. Enum枚举类|注解Annotation

    Enum枚举类 ①枚举类和普通类的差别: 使用 enum 定义的枚举类默认继承了 java.lang.Enum 类 枚举类的构造器仅仅能使用 private 訪问控制符 枚举类的全部实例必须在枚举类中 ...

随机推荐

  1. 【转】Mac find 去除 “Permission denied” 信息的方法

    转自 https://segmentfault.com/a/1190000007058875 Mac 下查找文件,最简单的方法应该是 mdfind filename 等同于 mdfind -name ...

  2. [Oracle]察看一张表的约束 和 察看一张表的索引

    --察看一张表的约束select table_name,constraint_name,constraint_type from user_constraints where table_name=u ...

  3. Web Service 实例基于Socket创建Web服务

    ServerSocket服务器端代码如下: public static void main(String[] args) throws IOException { // 1:建立服务器端的tcp so ...

  4. Throughput Controller(吞吐量控制器) 感觉就像个线程控制器来的

    Percent Executions  下的 Throghput 意思是跑总线程的百分之多少. 如 10线程循环一次, Throghput 设置为80,则有8个线程会跑这个请求 Total Execu ...

  5. Nonce

    Nonce是或Number once的缩写,在密码学中Nonce是一个只被使用一次的任意或非重复的随机数值. 在加密技术中的初始向量和加密散列函数都发挥着重要作用,在各类验证协议的通信应用中确保验证信 ...

  6. 解决Unity3d 图片黑边问题

    突然发现UI有黑边,在Photoshop里面没发现问题. 最后在图集的属性中去掉Minimap选项就可以了.

  7. mac Access denied for user 'root'@'localhost' (using password: YES)

    1:苹果->系统偏好设置->最下边点mysql 在弹出页面中 关闭mysql服务 2: Start it in safe mode 进入终端 输入: cd /usr/local/mysql ...

  8. ES6、ES7、ES8、ES9、ES10

    ES6新特性(2015) ES6的特性比较多,在 ES5 发布近 6 年(2009-11 至 2015-6)之后才将其标准化.两个发布版本之间时间跨度很大,所以ES6中的特性比较多.在这里列举几个常用 ...

  9. Android开发环境搭建(studio版)

    1.下载安装JDK 网址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

  10. TOMCAT 安装教程 & 配置CGI & c语言exe

    TOMCAT安装 参考原文网址:百度经验http://jingyan.baidu.com/article/154b4631aad2bb28ca8f4191.html 1.下载安装JDK 网址:http ...