CLR_Via_C#学习笔记之枚举
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#学习笔记之枚举的更多相关文章
- JDK源码学习笔记——Enum枚举使用及原理
一.为什么使用枚举 什么时候应该使用枚举呢?每当需要一组固定的常量的时候,如一周的天数.一年四季等.或者是在我们编译前就知道其包含的所有值的集合. 利用 public final static 完全可 ...
- 0029 Java学习笔记-面向对象-枚举类
可以创建几个对象? n多个:大部分的类,都可以随意创建对象,只要内存不爆掉 1个:比如单例类 有限的几个:采用单例类的设计思路,可以只允许创建少数的几个特定的对象:还有就是枚举类. 创建少数几个对象, ...
- JavaScript学习笔记-实现枚举类型,扑克牌应用
//实现枚举类型,扑克牌应用 function creatEnum(p){ //构造函数 var Enumeration = function(){throw 'can not Ins ...
- C#学习笔记-----C#枚举中的位运算权限分配
一.基础知识 什么是位运算? 用二进制来计算,1&2:这就是位运算,其实它是将0001与0010做位预算 得到的结果是 0011,也就是3 2.位预算有多少种?(我们就将几种我们权限中会 ...
- swift学习笔记之-枚举
//枚举定义 import UIKit //枚举定义 (枚举.结构体.类的名字首字母必须大写,表示为定义了新的类型) /*枚举为一组相关的值定义了一个共同的类型,使你可以在你的代码中以类型安全的方式来 ...
- Swift 学习笔记 enum 枚举类型
异端,异端啊,我感觉这是map吧? enum ATMStatus { case Success(Int) case Error(String) } func withdraw(amount: Int) ...
- Java学习笔记之——枚举类
枚举可以限定类的值只是有限个,例如:星期,只有星期一到星期天 语法案例:
- CLR_Via_C#学习笔记之事件
一:首先我先引用网上别人对事件的一些说明,然后将会通过一个事例进行对事件的演示: EventArgs是包含事件数据的类的基类,用于传递事件的细节.EventHandler是一个委托声明如下 publi ...
- Swift学习笔记 - 位移枚举的按位或运算
在OC里面我们经常遇到一些枚举值可以多选的,需要用或运算来把这些枚举值链接起来,这样的我们称为位移枚举,但是在swift里面却不能这么做,下面来讲解一下如何在swift里面使用 OC的位移枚举的区分 ...
随机推荐
- oracle rac常用的命令
oracle rac常用的命令 节点层:olsnodes 网络层: oifcfg 集群层:crsctl,ocrcheck,ocrdump,ocrconfig 应用层:srvctl,onsctl,crs ...
- NYNU_省赛选拔题(3)
题目描述 二叉树,若其与自己的镜像完全相同,就称其为镜像树. 是一棵镜像树:而 不是镜像树.现给你一棵二叉树,请你判断其是不是镜像树. 输入 第一行是一个整数数T,表示测试数据有多少组每组数据第一行是 ...
- ftp server来源分析20140602
ftp server学习位和源代码分析片 记录自己的第一个开源的分析过程: 从源代码:野狐灯(我接下来的几篇文章是从源头:野狐灯,每个以下哪项不是他们设置.) 20140602 Ftp的源码目录例如 ...
- VS解决方案创建
示例VS解决方案的创建(一) 进行项目开发的第一步,是创建出适合自己团队习惯的VS解决方案,虽然我已经提供了项目示例,但毕竟是我创建的,你直接使用可能并不合适,另外你如果尝试模仿重新创建该示例,中 ...
- 注册 集 与 删除 -- C
文章3位设置和清除操作. #include <stdio.h> #include <stdlib.h> #include <string.h> #define BI ...
- UML九种图汇总
UML视频读,该文件开始起草.我不知道如何下手啊!我想先UML九图和总结的关系,然后开始用它的文件. 首先在地图上. UML的九种图各自是:用例图.类图.对象图.状态图.活动图.协作图.序列图.组件图 ...
- R.layout.main connot be resolved 和R.java消失
出现例如以下问题: 鼠标放到出代码上面: 分析问题: 1.查看R文件是否被生成.假设没有生成,则勾选build Automatically,然后Clean: 2.假设R文件已生成.则删除去掉代码中: ...
- jquery 直接调用 wcf,面向服务的SOA架构 ( 第三天)
所谓万事 具备,只欠东风了!! 接下来就是 wcf 的调用, 首先 在客户端下,随便 写一个 html页面,然后写入如下方法: <script src="scripts/jquery. ...
- c语言发挥帕斯卡三角
我们已经确定了帕斯卡三角的规则,下面是我的代码,非常实用哦! !! #include<stdio.h> void main() { int i,j,n,k; sca ...
- Java设计模式偷跑系列(六)Singleton模式的建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39784403 单例模式(Singleton):是一种经常使用的设计模式. 在Java应用中 ...