枚举类型(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"); }
结果查看:
感谢您的阅读,坚持每天进步一点点,离成功就更进一步;希望本文对您有所帮助;