枚举

  枚举类型声明为一组相关的符号常数定义了一个类型名称。

  枚举类型为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。例如:假设你必须定义一个变量,该变量的值表示一周中的一天。该变量只能存储七个有意义的值。若要定义这些值,可以使用枚举类型。枚举类型是使用enum关键字声明的。

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

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

  如果不为枚举数列表中的元素指定值,则它们的值将以1为增量自动递增。在前面的示例中,Days.Sunday的值为0,Days.Monday的值为1,依次类推。

枚举的优点

  • 使代码易于维护,有助于确保给变量指定合法的、期望的值。
  • 使代码更清晰,允许用描述性的名称表示整数值,而不是用含义模糊的数来表示
  • 使代码更易于键入。在给枚举类型的实例赋值时,VS.NET IDE会通过IntelliSense弹出一个包含可接受值的列表框,减少了按键次数

枚举实例

  声明:

  public enum TimeOfDay

  {

    Morning = 0,

    Afternoon = 1,

    Evening = 2,

  }

  使用:

  public string getTime OfDay(TimeOfDay time)

  {

    string result = string.Empty;

    swith(time)

    {

      case TimeOfDay.Morning:

        result = "上午";

        break;

      case TimeOfDay.Afternoon:

        result = "下午";

        break;

      case TimeOfDay.Evening:

        result = "晚上";

        break;

      default:

        result = "未知";

        break;

    }

    return result;

  }

枚举方法

<1>获取枚举字符串

TimeOfDay time = TimeOfDay.Afternoon;

<2>Enum.Parse()方法。这个方法带3个参数,第一个参数是要使用的枚举类型。其语法是关键字typeof后跟放在括号中的枚举类名。第二个参数是要转换的字符串,第三个参数是一个bool,指定在进行转换时是否忽略大小写。最后,注意Enum.Parse()方法实际上返回一个对象引用,我们需要把这个字符串显示转换为需要的枚举类型(这是一个取消装箱操作的例子)。

TimeOfDay time2 = (TimeOfDay) Enum.Parse(typeof(TimeOfDay), "afternoon", true);

<3>得到枚举的某一个值对应的名称

lbOne.Text = Enum.GetName(typeof(TimeOfDay), 0);

<4>得到枚举的所有的值

foreach(int i in Enum.GetValues(typeof(TimeOfDay)))

     lbValues.Text += i.ToString();

<5>枚举的所有名称

foreach(string temp in Enum.GetNames(typeof(TimeOfDay)))
            lbNames.Text+=temp;

.NET中Flags枚举的使用

.NET中的枚举我们一般有两种用法,一是表示唯一的元素序列,例如一周里的各天;还有就是用来表示多种复合的状态。这个时候一般需要为枚举加上[Flags]特性标记为位域,例如:

[Flags]
enum Styles

{
  ShowBorder = 1,         //是否显示边框
  ShowCaption = 2,        //是否显示标题
  ShowToolbox = 4         //是否显示工具箱
}

这样我们就可以用"或"运算符组合多个状态,例如:

myControl.Style = Styles.ShowBorder | Styles.ShowCaption;

这时myControl.Style枚举的值将变成 1+2=3,它的ToString()将变成"Styles.ShowBorder , Styles.ShowCaption"

以下是关于枚举的一些常见操作:

将枚举的值变回枚举对象:

Style style = (Styles) Enum.Parse(typeof(Styles), 4);   // ---> style = Styles.ToolBox;

检查枚举是否包含某个元素:

bool hasFlag = ((style & Styles.ShowBorder) != 0);

从组合状态中去掉一个元素。用"^"运算符可以做到。在去掉某个元素前做一番检查,如果枚举包含这个元素,再去掉它:
Styles style = Styles.ShowBorder | Styles.ShowCaption;

if ((style & Styles.ShowBorder) != 0){
  style = style ^ Styles.ShowBorder;
}

C# 枚举 小总结的更多相关文章

  1. 【java】:枚举小demo

    package com.jwis.study.enumeration; /** * @author lx * 枚举的一些方法 */ //⑴ enum Substar{tst1,tst2,ts3} pu ...

  2. 【枚举+小技巧】【TOJ4115】【Find the number】

    题目大意 找到一个最小的奇数 约数个数为n 结果mod10^9+7 根据 约数个数=(p1+1)*(p2+1)............ 将n 枚举分解成连乘式.(枚举个数,dfs) 比较大小 log ...

  3. F. Make Them Similar ( 暴力折半枚举 + 小技巧 )

    传送门 题意: 给你 n 个数 a[ 1 ]  ~ a[ n ], n <= 100: 让你找一个 x , 使得 a[ 1 ] = a[ 1 ] ^ x ~ a[ n ] = a[ n ] ^ ...

  4. 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum

    Sum Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=4704 Mean: 给定一个大整数N,求1到N中每个数的因式分解个数的 ...

  5. SHOI2001 小狗散步

    题目传送门 感觉这题最大的难点是发现它的解法是二分图最大匹配 主人的路线是固定的,对于每一段的路线,我们可以枚举小狗想去的景点,如果时间够,我们就将这段路线的起点和小狗想去的点连起来 这样就形成了一个 ...

  6. POJ 1380 Equipment Box (暴力枚举)

    Equipment Box 题目链接: http://acm.hust.edu.cn/vjudge/contest/130510#problem/B Description There is a la ...

  7. 背包九讲 && 题目

    ★.背包求方案数的时候,多重背包是不行的,因为产生重复的背包会有多种情况. ★.背包记录路径的时候,其实是不行的,因为更新了12的最优解,如果它依赖于6这个背包,然后你后面改变了6这个背包,就GG 1 ...

  8. 经典贪心算法uva11729

    uva11729 这个题的题意是 你有n个部下,每个部下需要完成一项任务.第i个部下需要你花Bi分钟交代任务,然后他会立刻独立地.无间断地执行Ji分钟后完成任务. 你需要选择交待任务的顺序,使得所有任 ...

  9. c++20701除法(刘汝佳1、2册第七章,暴搜解决)

    20701除法 难度级别: B: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述     输入正整数n,按从小到大的顺序输出所有 ...

随机推荐

  1. 关于WPF自定义控件(导航)

    1.在WPF中自定义控件(1)概述 2.在WPF中自定义控件(2) UserControl 3.在WPF中自定义控件(3) CustomControl (上) 4.在WPF中自定义控件(3) Cust ...

  2. >>和<<<区别

    1.>>表示右移(有符号右移),如:15>>2的结果是3,-31>>3的结果是-4,左边以该数的符号位补充,移出的部分将被抛弃. 转为二进制的形式可能更好理解(省略 ...

  3. 【代码审计】EasySNS_V1.6 前台XSS跨站脚本漏洞分析

    0x00 环境准备 EasySNS官网:http://www.imzaker.com/ 网站源码版本:EasySNS极简社区V1.60 程序源码下载:http://es.imzaker.com/ind ...

  4. 【代码审计】CLTPHP_v5.5.3后台任意文件删除漏洞分析

      0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...

  5. Linux命令之乐--wget

    常见参数: 参数 作用 -b 后台下载模式. -P 下载到指定目录. -t  最大尝试次数. -c  断点续传 -p 下载页面内所有资源,包括图片.视频等. -r 递归下载 实例1,下载本站的所有文章 ...

  6. linux sumba服务器简单配置

    使用samba设置linux和windows直接简单的文件共享 前提: 1.linux和windows已经可以互相ping同 2.已经安装好smb 查看是否安装smb rpm -aq|grep smb ...

  7. Servlet基本用法(二)接口和类

    一.摘要 本文主要简单介绍开发Servlet需要用到的接口和类. 二.ServletRequest和ServletResponse接口 当客户请求到来时,由容器创建一个ServletRequest对象 ...

  8. 深入理解 Neutron -- OpenStack 网络实现(1):GRE 模式

    问题导读1.什么是VETH.qvb.qvo?2.qbr的存在的作用是什么?3.router服务的作用是什么? 如果不具有Linux网络基础,比如防火墙如何过滤ip.端口或则对openstack ovs ...

  9. LeetCode - 637. Average of Levels in Binary Tree

    Given a non-empty binary tree, return the average value of the nodes on each level in the form of an ...

  10. MFC 常见问题

    一 常见变量获得 CDC * cDc=GetDC(); HDC m_Screenhdc = this->GetDC()->m_hDC; //  整个窗口客户区的坐标 this->Ge ...