枚举

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

  枚举类型为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。例如:假设你必须定义一个变量,该变量的值表示一周中的一天。该变量只能存储七个有意义的值。若要定义这些值,可以使用枚举类型。枚举类型是使用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. ios开发之--条用第三方地图路线导航

    项目里面有位置功能,需要有导航,导航两种实现方式 (集成第三方SDK.URL跳转第三方应用) ,直接集成就不说,下面来说下通过url跳转, 最终效果如如下: 如果手机上安装的有客户端就展示,没有就不展 ...

  2. ios开发之--使用UILabel Category 计算UILabel内容大小

    在此仅做记录,代码如下:

  3. ios开发之-- tableview/collectionview获取当前点击的cell

    方法如下: 一般collectionView 或者 tableview都有自带的点击函数,如下: , collectionView -(void)collectionView:(UICollectio ...

  4. HttpClientUtil请求http地址的工具类

    直接贴代码: import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.apache ...

  5. Cesium添加水面

    var viewer = new Cesium.Viewer('cesiumContainer');var waterPrimitive = new Cesium.Primitive({ //show ...

  6. __declspec(dllimport)与__declspec(dllexport)作用总结

    参考自:http://bbs.csdn.net/topics/330169671 __declspec(dllexport):导出符号,也就是定义需要导出函数的dll中给导出函数的函数声明前面加上导出 ...

  7. php安装xdebug后var_dump输出没有格式化的问题

    开发环境,装了一个xdebug扩展方便调试代码. 但是环境配置好了之后却发现xdebug加载成功了但是var_dump输出的内容却没有使用html格式化 这时想到估计是php.ini里面的某个输出的配 ...

  8. css3整理--text-shadow

    text-shadow语法: text-shadow:[颜色(Color) x轴(X Offset) y轴(Y Offset) 模糊半径(Blur)],[颜色(color) x轴(X Offset) ...

  9. Python OS 文件/目录方法

    Python OS 文件/目录方法 os 模块提供了非常丰富的方法用来处理文件和目录.常用的方法如下表所示: 序号 方法及描述 1 os.access(path, mode) 检验权限模式 2 os. ...

  10. war部署到tomcat

    gs-rest-service-0.1.0.war复制到tomcat-9.0.0.M17\webapps\ 打开server.xml,这Host节点,加入<Context path=" ...