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的位移枚举的区分 ...
随机推荐
- android EditText问题多行文本输入
一旦习惯了网络和swing在文本框输入,我们Android突然缺乏这样的管制,刚开始使用它是相当费力.为了要实现多行文本输入框和显示.逐一克服这些问题,如下面: 1. 怎么做EditText显示区域在 ...
- 取一种类型里面的产品销售前3甲的数据Sql
需求:取出每种分类里面的销售前3甲的产品信息 表设计如下图: 数据如下: 两种方法可以实现: 1. SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION ...
- ORACLE union order by
select * from ( select a.id,a.oacode,a.custid,a.custname,a.xsz,a.salename,a.communicationtheme,a.com ...
- java_前端_autocomplete_搜索框自动匹配提示
效果图: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> < ...
- Sql数据类型转换
一.ASCII码值与字符间转换 1.ASCII()与CHAR() ASCII()返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用''括起来,但含其 ...
- BIP Requests Are Failing With Error "OPP Error Oracle.apps.xdo.XDOException: Error Creating Lock Fil
In this Document Symptoms Cause _afrLoop=975833031487795&id=1512691.1&displayIndex=1&a ...
- jQuery的ajax对WebApi和OData的封装
基于jQuery的ajax对WebApi和OData的封装 WebApi 的使用带来了一个显著的特点,对type有一定的要求.一般ajax的type无非就是两种,GET和POST.如果用JSONP来跨 ...
- curl 简单使用
cURL -- Command Line URL viewer -u username:password 以 Basic 方式发送用户名和密码 -d 以 POST 方式发送数据 -X 支持其它动词, ...
- Windows Phone 8.1 多媒体(2):视频
原文:Windows Phone 8.1 多媒体(2):视频 Windows Phone 8.1 多媒体(1):相片 Windows Phone 8.1 多媒体(2):视频 Windows Phone ...
- IOS中 类扩展 xib
一.类扩展(class extension,匿名分类) .格式 @interface 类名 () { // 成员变量... } // 方法声明... @end .作用 > 写在.m文件中 > ...