枚举概念

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

示例代码1

enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

默认情况下枚举中每个元素的基本类型都是int。可以使用冒号指定另一种整数类型。

示例代码2

enum Day : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

默认情况下,第一个枚举值具有值0,并且每个连续枚举数的值将增加1。

枚举数可以使用初始值设定项来替代默认值。

若设置某一枚举数的值,之后的枚举数仍然按1递增。

示例代码3

enum Day {Sat=1, Sun, Mon, Tue=5, Wed, Thu, Fri};

每个枚举都有一个基础类型,该基础类型可以是除char外的任何整数类型,枚举元素的默认基础类型是int。

已批准的枚举类型有byte、sbyte、short、ushort、int、uint、long或ulong。

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

示例代码4

enum MachineState
{PowerOff = 0,Running = 5,Sleeping = 10,Hibernating = Sleeping + 5
}

枚举方法

获取名称

public static string GetName(Type enumType, object value);

示例代码5

//获取Day枚举中Day.Friday的名称,返回值为"Friday"
System.Enum.GetName(typeof(Day), Day.Friday)

获取名称数组

public static string[] GetNames(Type enumType);

示例代码6

string[] names = System.Enum.GetNames(typeof(Day));

获取实例值得数组

public static Array GetValues(Type enumType);

实例代码7

Array arr = System.Enum.GetValues(typeof(Day));

将枚举常数的名称或数值的字符串表示转换成等效的枚举对象

public static object Parse(Type enumType, string value);

示例代码8

string day = Day.Friday.ToString();
var fri = (Day)System.Enum.Parse(typeof(Day),day);

相关常用方法可以参考枚举基类 System.Enum

作为位标志的枚举类型

可以使用枚举类型来定义位标志,这使枚举类型的实例能够存储枚举器列表中定义的值的任何组合。 (当然,某些组合在你的程序代码中可能没有意义或不允许使用。)

创建位标志枚举的方法是,应用 System.FlagsAttribute 属性并适当定义一些值,以便可以对这些值执行 ANDORNOT 和 XOR 按位运算。 在位标志枚举中,包括一个值为零(表示“未设置任何标志”)的命名常量。 如果零值不表示“未设置任何标志”,请勿为标志指定零值。

示例代码9

[Flags]
enum Days
{None = 0x0,Sunday = 0x1,Monday = 0x2,Tuesday = 0x4,Wednesday = 0x8,Thursday = 0x10,Friday = 0x20,Saturday = 0x40
}

枚举的位运算

|并集  &交集  ^差集  ~取反

为枚举拓展新方法

示例代码10

[Display(Name = "一周")]
public enum Day
{[Display(Name = "星期天")]Sunday,[Display(Name = "星期一")]Monday,[Display(Name = "星期二")]Tuesday,[Display(Name = "星期三")]Wednesday,[Display(Name = "星期四")]Thursday,[Display(Name = "星期五")]Friday,[Display(Name = "星期六")]Saturday
}
/// <summary>
/// 枚举拓展类
/// </summary>
public static class EnumExtend
{/// <summary>/// 根据System.ComponentModel.DataAnnotations下的DisplayAttribute特性获取显示文本/// </summary>/// <param name="t"></param>/// <returns></returns>public static string GetDisplayText(this Enum t){var t_type = t.GetType();var fieldName = Enum.GetName(t_type, t);var objs = t_type.GetField(fieldName).GetCustomAttributes(typeof(DisplayAttribute), false);return objs.Length > 0 ? ((DisplayAttribute)objs[0]).Name : null;}
}

  

参考文献:枚举类型(C#编程指南)

转载于:https://www.cnblogs.com/li-learning/p/CSharp_Enum.html

C#枚举(Enum)小结相关推荐

  1. TypeScript 枚举(Enum)

    TypeScript 枚举(Enum) 本节介绍枚举类型的定义及其使用,需要定义一组相同主题的常量数据时,应该立即想到枚举类型.在学习过程中,需要注意枚举类型的正向映射和反向映射,可以通过编译后的 J ...

  2. c语言enum能自定义吗,18、C语言 —— 枚举enum

    1.枚举的概念 枚举是C语言的一种构造数据类型.它用于声明一组命名的常数.当一个变量有几个固定的取值时,可以将这个变量定义为枚举类型.比如季节(春天,夏天,秋天,冬天)就可以定义为枚举类型. 2.枚举 ...

  3. 枚举enum与#define 宏的区别?

    枚举enum与#define 宏的区别? 1)#define 宏常量是在预编译阶段进行简单替换.枚举常量则是在编译的时候确定其值. 2)一般在编译器里,可以调试枚举常量,但是不能调试宏常量. 3)枚举 ...

  4. java 枚举 下拉框_枚举enum在velocity模板语言中的应用-下拉菜单

    1. velocity模板vm页面 语言: #if("add" == $flag) #foreach($elem in $languageEnum) $elem.name #end ...

  5. Swift之深入解析枚举enum的底层原理

    一.Swift 枚举 枚举简单的说也是一种数据类型,只不过是这种数据类型只包含自定义的特定数据,它是一组有共同特性的数据的集合. Swift 的枚举类似于 Objective C 和 C 的结构,枚举 ...

  6. protobuf入门教程(五):枚举(enum)、包(package)

    枚举(enum) 消息格式 当需要定义一个消息类型的时候,可能想为一个字段指定某"预定义值序列"中的一个值,这时候可以通过枚举实现. syntax = "proto3&q ...

  7. 用枚举enum实现单例

    [README] 1,effectivejava 讲到使用 枚举类实现单例的例子,非常好用: 2,好处如下: 不用定义私有构造器: 不用定义获取单例的方法,如 getInstance() :通过 枚举 ...

  8. Java、Mysql、MyBatis 中枚举 enum 的使用

    From: https://yulaiz.com/java-mysql-enum/ Java 和 MySql 中都有枚举的概念,合理的使用枚举,可以让代码阅读和数据库数据查询更加直观.高效.那么我们怎 ...

  9. c++ enum 给定类型_C++11作用域内枚举enum

    在C++11之前的枚举(enum),是没有办法两个枚举(enum)内有相同枚举名的.如果还不知道C++中枚举(enum)是什么,可以看这篇:枚举enum 如:苹果和桔子都有大,中,小.写个代码来说明下 ...

  10. Java枚举(Enum)类型使用的正确姿势

    关于Java Enum的介绍及原理参见 Java枚举(Enum)类型的基本介绍与原理探求 Enum类型的基本使用 定义一个枚举类的主要作用就是在逻辑代码中对某个变量的值进行比较.同样以季节的枚举类Se ...

最新文章

  1. Centos 7 冗余备份磁盘配置介绍
  2. TensorRT部署深度学习模型
  3. 加油!打工人!打工人分析简报
  4. BZOJ 4221 [JOI2012春季合宿]Kangaroo (DP)
  5. Windows10搭建ftp服务
  6. .NET开发人员如何开始使用ML.NET
  7. bzoj1083 [SCOI2005]繁忙的都市(最小生成树)
  8. mysql数据存储过程详解_mysql数据存储过程参数实例详解
  9. 基于c语言中调试工具的用法汇总(不包含gdb)【转】
  10. 源码解析:init-method、@PostConstruct、afterPropertiesSet孰先孰后
  11. 几个值得收藏windows软件
  12. IBM8800存储,光钎交换机384B,主机Linux,二代支付前置
  13. 一个可以模仿你的表情的语音聊天机器人——Facemoji 废萌(OpenCV+Dlib+Live2D+图灵机器人+讯飞IAT语音听写+讯飞TTS语音合成)
  14. 矩阵的广义逆——减号、加号广义逆的求法
  15. 页面跳转的两种方式(转发和重定向)区别详解:
  16. vue.js 知乎_zhihu每日水疗中心与vue.js
  17. 计算机无法屏保,电脑屏幕保护程序为什么不能修改 原因及解决方法【详细介绍】...
  18. 百度地图JavaScript API获取用户当前经纬度和详细地理位置,反之通过详细地理位置获取当前经纬度...
  19. 微信公众号里放XLS链接教程
  20. 论题:基于深度学习的图像识别系统

热门文章

  1. MySQL的用户表(user)
  2. win7旗舰版安装不了python_怎样在Win7 64位旗舰版安装Python+Eclipse开发环境
  3. css 获取屏幕宽度_设备像素、设备独立像素、CSS像素、分辨率、PPI、devicePixelRatio 的区别...
  4. telnet到设备里 php_金融行业思科设备典型网络故障案例:76系列典型案例(一)...
  5. python调用simulink_使用Python从dbc文件中提取simulink建模数据定义
  6. 怎么取消苹果手机自动续费_手机腾讯视频的vip怎么取消自动续费?
  7. 如何正确认识C语言在当今编程领域的地位
  8. C语言中#if,#if defined ,#ifdef,extern的用法描述
  9. linux 下脚本安装 mysql_linux(centos7)下编译安装mysql(数据库)一键安装详解+脚本文件...
  10. Ubunt中卸载protobuf与安装3.6.0版本步骤