一、概述

定义一个值类型,其中包含固定值集合。枚举类型变量可以是此集合中的任意一个或多个值。

枚举使用enum关键字来声明,与类同级。

枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符。枚举本身的修饰符仅能使用public和internal。

二、常数枚举

1、定义枚举类型

显式指定枚举的底层数据类型,如果没有明确指定底层数据类型则默认的数据类型是int类型。

enum sex : byte  //显示指定枚举的底层数据类型
{
male,
female, //此逗号可以省略
};       //此分号可以省略

显式设置枚举的成员常量值,默认是从0开始,逐个递增的。但是以下例子却设置成了1,2,3,40,1。而且成员值可以一样的。

void Main()
{
Console.WriteLine((int)Week.Monday); //获取值
} enum Week
{
Monday = ,
Tuesday = ,
Wednesday = ,
Sunday = ,
Everyday = //成员的值可以设置成一样的,但是成员不行
}

2、声明枚举变量并初始化

Color myColor=Color.White;
Color myColor=(Color);//由值转成枚举成员
Color myColor=(Color)Enum.Parse(typeof(Color), "White"); //将字符串解析成枚举成员

3、枚举变量的使用

Color myColor = Color.White;
string Name = myColor.ToString();
int intName = (int)myColor;//或Convert.ToInt32(myColor)
string Name1 = Enum.GetName(typeof(Color), ); //由值获取名

4、循环枚举

Dictionary<string, int> Colorlist = new Dictionary<string, int>();
string[] keys = Enum.GetNames(typeof(Color));
Array values = Enum.GetValues(typeof(Color)); for (int i = ; i < keys.Length; i++)
{
Colorlist.Add(keys[i], (int)values.GetValue(i));
}

应用:

//填充comboBox
comboBox1.DataSource = Enum.GetValues(typeof(Color));
Color value = (Color)comboBox1.SelectedValue; //Grid的列数据
DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
col.Name = "My Enum Column";
col.DataSource = Enum.GetValues(typeof(Color));
col.ValueType = typeof(Color);
dataGridView1.Columns.Add(col);

三、位域枚举

位域通常用于由可组合出现的元素组成的列表,位域设计为通过按位“或”运算组合来生成未命名的值,而枚举常数则不是。
      位域通常用 2 的幂(即 1、2、4、8 、16等2的几次方)定义枚举常量。这意味着组合的枚举常量中的各个标志都不重叠。

1、定义枚举类型

[Flags] //Flags属性表示此枚举为位域枚举
enum Color
{
None = ,
Red = ,
White = ,
Blue = ,
Black =
}

2、声明枚举变量并初始化

Color myColor=Color.Red | Color.White|Color.Blue;//”|”表示相并
Color myColor = (Color);//由值转成枚举成员,Red, White
Color myColor = (Color)Enum.Parse(typeof(Color), "White,Blue"); //将字符串解析成枚举成员,White, Blue

3、枚举变量的使用

Color myColor = Color.Red | Color.White | Color.Blue;
string Name = myColor.ToString();//Red,White,Blue
int intName = (int)myColor;//或Convert.ToInt32(myColor),7 string Name2 = Enum.GetName(typeof(Color), );//由值获取名,White

4、位域枚举特殊操作

1、判断枚举变量是否包含在某个或某些枚举项:

if(myColor & Color.Red)==Color.Red){}//”&”表示相交,判断是否包含Color.Red
if(myColor & Color.Red)!=){}

2、从枚举变量中去除某个或某些枚举项:

myColor=myColor&(~(Color.Red | Color.White ))//”~”表示取反,出去Color.Red | Color.White两项。

或者

myColor=myColor^(Color.Red | Color.White )//”^”表示异或,不同为真,相同为假。

3、判断美剧变量是否等于某个或某些枚举项:

if((myColor | Color.Write)==Color.Write)//判断是否只有白色。

枚举类型与位域枚举Enum的更多相关文章

  1. 枚举类型的使用方法enum

    一.枚举类型的使用方法 一般的定义方式如下: enum enum_type_name { ENUM_CONST_1, ENUM_CONST_2, ... ENUM_CONST_n } enum_var ...

  2. 枚举类型Enum

    包java.dataStructure中,文件名Enum_demo.java 在JDK5中引入了一个新的关键字——enum,可以直接定义枚举类型 在申明枚举类的时候,也可以申明属性.方法和构造函数,但 ...

  3. Enum(枚举类型)的基本应用

    一.前言 在我们日常的开发过程中,我们经常定义使用常量:在Effective Java建议用枚举来替换常量的使用,提高我们代码的质量,总结一下枚举定义常量的基本使用 二.枚举类型说明      1.枚 ...

  4. C#中的枚举类型(enum type)

    ylbtech 原文 C#中的枚举类型(enum type) 概念 枚举类型(enum type)是具有一组命名常量的独特的值类型.在以下示例中: enum Color { Red, Green, B ...

  5. [转载] Java中枚举类型的使用 - enum

    目录 1 枚举类的编译特性 2 向枚举类中添加方法 3 接口内部创建枚举 4 枚举类中使用枚举 5 扩展: 验证values()不是通过父类继承的 本文转载自博客 - Java枚举类型, 博主对原文内 ...

  6. java 枚举类型 enum

    在java SE5中添加了枚举类型,即enum关键字.在这之前,当你需要创建一个整形常量集时,但是这些枚举值并不会必然的将其自身的取值限制在这个常量集的范围之内,因此这样做的显得不安全,也不方便使用. ...

  7. Python面向对象-枚举类型enum

    枚举类型:在实际问题中,有些变量的值被限定在一个有限的范围内.例如:一个星期有且只有7天,一年有且只有十二个月,一个班每周有6门课程等等.如果把这些量说明为整型.字符串或者其他类型显然是不合适.编程界 ...

  8. Enum枚举类型实战总结,保证有用!

    一般在我们开发时如果能使用枚举罗列的,一般都会定义一个枚举类型.将枚举类型作为方法的参数,可以方便的进行调用,给我们带来不少的遍历,当然有时候它还不如直接用一个int类型带来,带来一定灵活性.但只要能 ...

  9. golang枚举类型 - iota用法拾遗

    在c#.java等高级语言中,经常会用到枚举类型来表示状态等.在golang中并没有枚举类型,如何实现枚举呢?首先从枚举的概念入手. 1.枚举类型定义 从百度百科查询解释如下:http://baike ...

随机推荐

  1. PTA (Advanced Level) 1040 Longest Symmetric String

    1040 Longest Symmetric String (25 分) Given a string, you are supposed to output the length of the lo ...

  2. php 析构函数,构造函数

    php 析构函数,构造函数   <?php /** * 测试使用的PHP操作类 * Date: 2017/7/13 * Time: 14:22 */class Test{ /** 姓名 */ p ...

  3. android studio导入android studio工程

    在导入其他android studio工程的时候因为gradle和sdk.tool等版本不一样,会导致android studio自动去后台下载,导致占用硬盘越来越大,最主要的时候会等待很久,不知道要 ...

  4. CentOS和RedHat等系列系统 yum源配置、时间同步

    一.yum源配置 1,进入yum源配置目录cd /etc/yum.repos.d 2,备份系统自带的yum源mv CentOS-Base.repo CentOS-Base.repo.bk下载163网易 ...

  5. amazeui笔记-CSS 布局相关

    CSS 等分网格: 说明:.am-avg-sm-2  数字表示几等分 会将子元素 <li>的宽度设置为 50%. 只能用于 <ul> / <ol> 结构 辅助类: ...

  6. web弹出对话框

    Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('请输入 ...

  7. SpringBoot 之Quartz的使用

    对于Quartz的使用,还是想说一句,SpringBoot真的很好用啊! 第一步:当然是引入依赖啦 <parent> <groupId>org.springframework. ...

  8. UNIX IPC: POSIX 消息队列 与 信号

    POSIX消息队列可以注册空队列有消息到达时所触发的信号,而信号触发对应的信号处理函数. 下面是一份基本的消息队列和信号处理结合的代码(修改自UNIX网络编程:进程间通信) #include < ...

  9. Thymeleaf学习记录(7)--页面引入/片段引入

    1.为页面添加footer: Templates文件夹下新建HTML文件: <!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xh ...

  10. Sspring bean被初始化加载2次

    Sspring bean被初始化加载2次 spring框架的web项目时,启动的时候发现某个bean被加载了两次,比如使用SchedulingConfigurer或者使用@PostConstruct的 ...