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. C# 实现对接电信交费易自动缴费 续(winio/winring0 自动填密码)

    原文:C# 实现对接电信交费易自动缴费 续(winio/winring0 自动填密码) 自动填密码大家可能都不莫生,最有名的应该是 按键精灵 只要是一个可以输入的地方都可以能过按键精灵来完成输入.我今 ...

  2. Android 内存管理 &Memory Leak & OOM 分析

    1.Android 流程管理&内存 Android主要应用在嵌入式设备其中.而嵌入式设备因为一些众所周知的条件限制,通常都不会有非常高的配置,特别是内存是比較有限的. 假设我们编写的代 码其中 ...

  3. Extjs4.1MVC详细解释

    :http://xiebaochun.github.io/ app.js [javascript] view plaincopyprint? Ext.onReady(function(){ Ext.Q ...

  4. CSharp设计模式读书笔记(7):适配器模式(学习难度:★★☆☆☆,使用频率:★★★★☆)

    适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper).适配器模式既可以作为类结构型模式,也可以作为对象 ...

  5. 【百度地图API】情人节求爱大作战——添加标注功能

    原文:[百度地图API]情人节求爱大作战--添加标注功能 任务描述: 2月2日是除夕,2月14立马来!即将到来的情人节,你想送TA一份什么礼物呢? 不如,在你们居住的地方,画个大大的桃心,表达你对TA ...

  6. jQuery 文件碎片

    经JS操作DOM节点可以是节点的单位,让我们连接节点,能够createElement,createTextNode,然后,appendChild定在一起,然后再用appendChild或insertB ...

  7. 项目管理实践 -- 健身小管家(Fitness housekeeper)的管理(4)

    提前几天把检查更新的功能完成了.

  8. Struts2_2_第一Struts2应用

    web.xml文件的配置与1同样. 1)HelloWorld类的代码: public class HelloWorldAction { private String message; public S ...

  9. Linux常用命令汇总-速查

    对Linux新手有用的20个命令 对中级Linux用户有用的20个命令 对Linux专家非常有用的20个命令 20个最受欢迎的Linux命令 20个有趣的Linux命令

  10. java设计模式之二抽象工厂模式(Abstract Factory)

    工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...