CLR_Via_C#学习笔记之枚举

枚举类型(Enum)定义的一组"符号名称/值"配对;因为枚举类型使用程序更容易编写、阅读和维护,而且它是强类型;

枚举是值类型;由System.Enum-->System.ValueType-->System.Object;有别于其他值类型是Enum不能定义任何方法、属性、或事件;

枚举都有一个基础类型:byte,sbyte,short,ushort,int(C#默认选择的,最常用),unit,long,ulong;

1:首先定义两个枚举

    public enum Limit
{
Write,
Read,
Delete,
WriteAndRead,
All
} public enum byteLimt : byte
{
White,
Red,
Blue
}

若要查看枚举的类型可以通过Enum.GetUnderlyingType

            Console.WriteLine("Limit的类型:"+Enum.GetUnderlyingType(typeof(Limit)));

            Console.WriteLine("byteLimt的类型:"+Enum.GetUnderlyingType(typeof(byteLimt)));

结果查看:

2:枚举的几种不同格式输出:

            Limit limitRead = Limit.Read;
Console.WriteLine(limitRead);
Console.WriteLine(limitRead.ToString());
Console.WriteLine(limitRead.ToString("G"));
Console.WriteLine(limitRead.ToString("D")); //十进制
Console.WriteLine(limitRead.ToString("X")); //十六进制

结果查看:

3:可以运用Enum的GetValues[返回Array]或GetName[返回string]、GetNames[返回string[]]查看,实例代码如下:

            Limit[] limitList = (Limit[])Enum.GetValues(typeof(Limit));
Console.WriteLine("枚举的个数为:" + limitList.Length);
foreach (Limit item in limitList)
{
Console.WriteLine("值:{0} 名称:{1}", item.ToString("D"), item.ToString());
} Console.WriteLine("通过GetName获得名称:"+Enum.GetName(typeof(Limit),1)); string[] limitNameList = Enum.GetNames(typeof(Limit));
foreach (string item in limitNameList)
{
Console.WriteLine("名称:{0}", item);
}

结果查看:

4:IsDefined方法来判断一个数值对于一个枚举类型是否合法,这样就可以防止一些不必要的异常

        public static void SetLimit(Limit item)
{
if (!Enum.IsDefined(typeof(Limit), item))
{
Console.WriteLine("此枚举不包含");
}
else
{
Console.WriteLine("此枚举存在");
}
}
            SetLimit((Limit)4);
SetLimit((Limit)10);

结果查看:

5:平时代码中经常结合Switch进行判断,代码如下

        public static void LimitOperate(Limit item)
{
switch (item)
{
case Limit.Read:
Console.WriteLine("此值为Read,值为:" + item.ToString("D"));
break;
case Limit.Write:
Console.WriteLine("此值为Write,值为:" + item.ToString("D"));
break;
case Limit.Delete:
Console.WriteLine("此值为Delete,值为:" + item.ToString("D"));
break;
}
}
            Limit newLimit = Limit.Read;
LimitOperate(newLimit);

结果查看:

6:Enum还有一个位标志,必须在Enum增加一个[Flags]的特性就可以进行位运算,经常用它进行比如权限的判断等(1 & 0 = 0, 1 | 0 = 1, ~1 = 0);

    [Flags]
public enum Permission
{
select = 1,
Edit = 2,
Delete = 4,
View = 8,
All = select | Edit | Delete | View
}

比如权限的加法:

            Permission per = Permission.View | Permission.select | Permission.Edit;
Console.WriteLine("目前拥有的权限为:" + per.ToString("D"));

权限的减法:

 per&=~Permission.select;
Console.WriteLine("修改后所拥有的权限为:" + per.ToString("D"));

权限的判断:

            if ((per & Permission.Edit) == Permission.Edit)
{
Console.WriteLine("拥有权限Edit");
}

结果查看:

感谢您的阅读,坚持每天进步一点点,离成功就更进一步;希望本文对您有所帮助;

 

 
 
 

CLR_Via_C#学习笔记之枚举的更多相关文章

  1. JDK源码学习笔记——Enum枚举使用及原理

    一.为什么使用枚举 什么时候应该使用枚举呢?每当需要一组固定的常量的时候,如一周的天数.一年四季等.或者是在我们编译前就知道其包含的所有值的集合. 利用 public final static 完全可 ...

  2. 0029 Java学习笔记-面向对象-枚举类

    可以创建几个对象? n多个:大部分的类,都可以随意创建对象,只要内存不爆掉 1个:比如单例类 有限的几个:采用单例类的设计思路,可以只允许创建少数的几个特定的对象:还有就是枚举类. 创建少数几个对象, ...

  3. JavaScript学习笔记-实现枚举类型,扑克牌应用

    //实现枚举类型,扑克牌应用 function creatEnum(p){     //构造函数     var Enumeration = function(){throw 'can not Ins ...

  4. C#学习笔记-----C#枚举中的位运算权限分配

    一.基础知识 什么是位运算? 用二进制来计算,1&2:这就是位运算,其实它是将0001与0010做位预算   得到的结果是 0011,也就是3  2.位预算有多少种?(我们就将几种我们权限中会 ...

  5. swift学习笔记之-枚举

    //枚举定义 import UIKit //枚举定义 (枚举.结构体.类的名字首字母必须大写,表示为定义了新的类型) /*枚举为一组相关的值定义了一个共同的类型,使你可以在你的代码中以类型安全的方式来 ...

  6. Swift 学习笔记 enum 枚举类型

    异端,异端啊,我感觉这是map吧? enum ATMStatus { case Success(Int) case Error(String) } func withdraw(amount: Int) ...

  7. Java学习笔记之——枚举类

    枚举可以限定类的值只是有限个,例如:星期,只有星期一到星期天 语法案例:

  8. CLR_Via_C#学习笔记之事件

    一:首先我先引用网上别人对事件的一些说明,然后将会通过一个事例进行对事件的演示: EventArgs是包含事件数据的类的基类,用于传递事件的细节.EventHandler是一个委托声明如下 publi ...

  9. Swift学习笔记 - 位移枚举的按位或运算

    在OC里面我们经常遇到一些枚举值可以多选的,需要用或运算来把这些枚举值链接起来,这样的我们称为位移枚举,但是在swift里面却不能这么做,下面来讲解一下如何在swift里面使用 OC的位移枚举的区分 ...

随机推荐

  1. hdu1297 Children’s Queue

    再加上男人:dp[i-1]: 加2一个女人:dp[i-2]+x. 上述的另一种情况下dp[i-2]它不仅包括加2女人对法律状况.和x是一个加号ff原违法的法律案后加入,这最后是mf案例,然后,x=dp ...

  2. VB.NET与C# 语法show差异

    学习VB.NET后发现,VB.NET与C#的语法基本的不同在两个部分,这两部分搞通了,那就游刃有余,迎刃而解了. 现将其对照总结例如以下: 一.实体部分 (与VB相比.在C#和VB.NET中,实体的使 ...

  3. 挑逗B少年搞计划10 假设你是愿意用我的心脏层剥离一层~

        这些天都非常推迟考试啊.然后,学校已安排一周培训,是的.在延迟学习,大狼医院我真的是正常水平.     幸好我们周六周日不让放假了,不然预计进度直接就停了.这两天也是抽出了时间把敲了一下三层的 ...

  4. 基于Hama并联平台Finding a Maximal Independent Set 设计与实现算法

    笔者:白松 NPU学生. 转载请注明出处:http://blog.csdn.net/xin_jmail/article/details/32101483. 本文參加了2014年CSDN博文大赛,假设您 ...

  5. 【.NET特供-第三季】ASP.NET MVC系列:MVC与三层图形对照

    近期在开发小组在研究:BS项目中是利用'MVC框架'还是继续沿用'三层'的问题. 由于曾经的.NET项目大多数都是利用三层开发的,所以大多数人都可以对三层进行熟练地运用.而项目的開始我们也曾听说过MV ...

  6. my97 日期控件

    官网:http://www.my97.net/   好多广告啊! 文档地址: http://www.mysuc.com/test/My97DatePicker/

  7. selenium之多线程启动grid分布式测试框架封装(二)

    五.domain类创建 在domain包中创建类:RemoteLanchInfo.java 用来保存启动信息. package com.lingfeng.domain; public class Re ...

  8. MySQL安装指南

    近期领导突然说要用MySQL,我立刻当天晚上就研究了一下. http://www.mysql.com/这是官网,还好能够訪问.好多年前已经被oracle收购.分为企业版和社区版: MySQL Ente ...

  9. [ACM] POJ 2506 Tiling (递归,睑板)

    Tiling Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7487   Accepted: 3661 Descriptio ...

  10. Zend Server的WebAPI焦点:异步操作

    Zend Server作为Web应用服务器,在使用时,涉及连接的基本步骤,其中包括许多可用的WebAPI行为. WebAPI提供一些需要时间才能完成的操作,包括很复杂的或依靠外部实体(如远程服务器)才 ...