枚举

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

  枚举类型为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。例如:假设你必须定义一个变量,该变量的值表示一周中的一天。该变量只能存储七个有意义的值。若要定义这些值,可以使用枚举类型。枚举类型是使用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. backbone学习笔记:模型(Model)(1)基础知识

    backbone为复杂Javascript应用程序提供MVC(Model View Controller)框架,框架里最基本的是Model(模型),它用来处理数据,对数据进行验证,完成后台数据与前台数 ...

  2. 【代码审计】后台Getshell的两种常规姿势

    0x00 前言 在早些年刚接触web安全的时候,基础套路都是找注入--找后台--找上传点--找数据库备份--Getshell,然而在代码审计的角度,也存在类似的基本操作. 这里结合代码实例介绍白盒Ge ...

  3. 第一个map reduce程序

    完成了第一个mapReduce例子,记录一下. 实验环境: hadoop在三台ubuntu机器上部署 开发在window7上进行 hadoop版本2.2.0 下载了hadoop-eclipse-plu ...

  4. Ajax 分析方法

    我们如何查看到 Ajax 请求: 以 https://m.weibo.cn/u/2830678474 这个网页为例,按 F12,加载网页,然后选择资源类型为 XHR 的就可以看到 Ajax 请求了 我 ...

  5. shell中判断是否是月末的方法

    判断今天是不是一月的最后一天: 如果$(TZ=IST-32 date +%d)是1就是月末了.

  6. popupWindow 在指定位置上的显示

    先看效果图,免得浪费大家时间,看是不是想要的效果 . 直接上代码 ,核心方法. private void showPopupWindow(View parent) { if (popupWindow  ...

  7. WIN32编程经验总结

    一 窗口和消息 1. 前缀: 2 WPARAM和LPARAM的意义在Windows是一种16位系统时,WndProc的第三个参数被定义为WORD,是一个16位的无符号整数,而第四个参数被定义为一个LO ...

  8. U盘安装centos6.4:缺少iso 9660映像

    方法: 1.下载安装的ISO文件    到www.centos.org网站下载对应的Centos 6.4安装文件.下载站点我一般选择网易镜像站点    64位下载参考链接:http://mirrors ...

  9. Delphi中ClientDataSet的用法小结

    Delphi中ClientDataSet的用法小结 TClientDataSet控件继承自TDataSet,其数据存储文件格式扩展名为 .cds,是基于文件型数据存储和操作的控件.该控件封装了对数据进 ...

  10. sencha touch 在线实战培训 第一期 第二节

    2013.12.30晚上8点开的课,仍然有些紧张,开始讲课进度很慢,后面又有些快了... 本期培训一共八节,前三堂免费,后面的课程需要付费才可以观看. 本节内容: 页面实现及跳转控制 跳转容器.路由理 ...