C#枚举(Enum)小结
枚举概念
枚举类型(也称为枚举)提供了一种有效的方式来定义可能分配给变量的一组已命名整数常量。该类型使用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 属性并适当定义一些值,以便可以对这些值执行 AND、OR、NOT 和 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#编程指南)
C#枚举(Enum)小结的更多相关文章
- C#中的枚举(Enum)你知道多少呢?
写个随笔文章是最难想的,我要是写个C#枚举个人小结,估计博客园的各位园有也觉得是哪个刚接触C#的人写的,要是取个名字叫C#枚举,又觉得不能完全表达自己的意思,现在这个名字看起来还凑合吧,写篇文章不容易 ...
- MySQL字段之集合(set)枚举(enum)
MySQL字段之集合(set)枚举(enum) (2008-12-23 13:51:23) 标签:it 分类:MySQL 集合 SET mysql> create table jihe(f1 ...
- 枚举 enum
typedef enum : NSUInteger { <#MyEnumValueA#>, <#MyEnumValueB#>, <#MyEnumValueC#>, ...
- 枚举enum学习小记
参考文献: [1]C++程序设计语言(特别版), 裘宗燕译, 机械工业出版社 [2]C++ Primer (3rd Ed.), S.B. Lippman and J. Lajoie, 人民邮电出版社 ...
- Java 枚举(enum) 详解7种常见的用法
Java 枚举(enum) 详解7种常见的用法 来源 https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的类型— ...
- Python 枚举 enum
Python 枚举 enum enum 标准模块在 3.4 版本才可以使用,3.3 以下版本需要独立安装:https://pypi.python.org/pypi/enum34#downloads,官 ...
- 【转】结构struct 联合Union和枚举Enum的细节讨论
结构struct 联合Union和枚举Enum的细节讨论 联合(Union)是一种构造数据类型,它提供了一种使不同类型数据类型成员之间共享存储空间的方法,同时可以实现不同类型数据成员之间的自动类型转换 ...
- 枚举Enum和常量0之间的恩怨
1,任何为0的常量表达式都能隐式的转换成枚举Enum. 对于这一点,在程序中没少吃苦头.特别是对于函数重载的情况,往往让人一头雾水. 看看下面的代码(摘自MSDN),你能猜到输出吗? public e ...
- C++和Java中枚举enum的用法
在C++和java中都有枚举enum这个关键字,但是它们之间又不太一样.对于C++来说,枚举是一系列命名了的整型常量,而且从枚举值转化为对应的整型值是在内部进行的.而对于Java来说,枚举更像一个类的 ...
- 【转】枚举enum学习小记
原帖: http://hi.baidu.com/yuleishou/item/caacae872190031ec216272f 表示在vs2008下实验了一下,有些东西和原帖的还是不一样的,都贴在这里 ...
随机推荐
- Flex很难?一文就足够了
Flexible Box 是什么 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实 ...
- HTML 练习绑定onclick事件
方法一 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- 阿里云ECS云服务器的简单使用
随着云服务的推广与普及,越来越多的人开始接触到云服务器.然而有些人购买后却不知从何下手,今天就来看下阿里云服务器的使用吧! 一.购买完阿里云服务器后进入阿里云官网首页点击控制台 找到所购买的云产品项点 ...
- Echarts 南海诸岛简图显示位置调整
最近需要echart同时显示海南岛和南海诸岛,开始想寻找南海诸岛的数据,经过查找,这种简图数据是没有的(china.js地图数据一一找过了),下图是echarts的一些示例,没有满足我们的要求 ...
- 【学习笔记】【Design idea】二、产品内测、公测、候选版本的概念及版本代码的书写
一.前言 参考:百度百科 https://baike.baidu.com/item/beta/640969?fr=aladdin 广义上对测试有着三个传统的称呼:Alpha(α).Beta(β)和Ga ...
- 今年开搞了,搭建一下vue开发环境
首先-->搞了几天的SpringBoot玩的差不多了,领导直接说, 别项目组需要做前后端分离,说前端缺少人手,没有办法咯,只能硬着头皮去了, 说先学一下'vue',给我个文档让我学学,说是前半年 ...
- 安装window下的redis,redis可视化管理工具(Redis Desktop Manager)安装,基础使用,实例化项目
以下包括内容: 一.redis下载安装,启动 二.Redis可视化管理工具(Redis Desktop Manager)安装 三.实例化项目 一.redis下载安装,启动 1,redis官方下载地址: ...
- vimium使用
vimium使用 chrome下面的vimium插件已经慕名已久,迟迟没有做尝试,今天在家有空就熟悉了一下vimium,感觉还是棒棒的.记录一下一些使用心得. 常用按钮 j 向上滚动 k 向下滚动 d ...
- .NET Core 使用NLog日志记录
前言 每个项目都会需要使用到日志功能,这对于项目上线后 出现的bug异常,能及时定位和便于后期错误分析.那我们今天来看看在.NET Core中如何使用NLog日志. NLog 什么是NLog呢? NL ...
- 浅谈SpringMVC执行过程
通过深入分析Spring源码,我们知道Spring框架包括大致六大模块, 如Web模块,数据库访问技术模块,面向切面模块,基础设施模块,核心容器模块和模块, 其中,在Spring框架的Web模块中,又 ...