深圳最好的营销网站建设公司哪家好,人工投票平台app,商丘网站制作与设计,淄博网站制作多样定制C#中enum类型#xff0c;相较于其他基本数据类型来说比较特殊#xff0c;他的本质上是一堆整数组成的结构体#xff0c;并且支持与整型的显式转化。
既然是枚举类型#xff0c;那么也就是说enum中的变量是不可以轻易改变的#xff0c;所以C#将枚举类型认定成了static变量…C#中enum类型相较于其他基本数据类型来说比较特殊他的本质上是一堆整数组成的结构体并且支持与整型的显式转化。
既然是枚举类型那么也就是说enum中的变量是不可以轻易改变的所以C#将枚举类型认定成了static变量在使用的时候与static变量一样(一组大写字母表示的是一个特定的类、枚举类型、命名空间或值)来声明使用
CLASS.ENUM var_name CLASS.ENUM.XXX;或者在代码端头部加入
using static NAMESPACE;
写个随笔文章是最难想的我要是写个C#枚举个人小结估计博客园的各位园有也觉得是哪个刚接触C#的人写的要是取个名字叫C#枚举又觉得不能完全表达自己的意思现在这个名字看起来还凑合吧写篇文章不容易大家且看且珍惜文章的开头废话依然是很多大家就将就一下说个小事情我个人写的文章不一定有什么技术含量也不一定能解决什么高大上的问题但是文章出自个人的辛苦研究总结所得如果你抓取了我的请贴上文章链接最恶心的莫过于红黑联盟抓了文章不给链接博文主页http://www.cnblogs.com/xiaofeixiang/进入正题吧:
枚举Enum定义
enum 关键字用于声明枚举即一种由一组称为枚举数列表的命名常量组成的独特类型。通常情况下最好是在命名空间内直接定义枚举以便该命名空间中的所有类都能够同样方便地访问它。 但是还可以将枚举嵌套在类或结构中。现在的有些电商网站根据购物的积分用到的金牌会员银牌会员铜牌会员. 1 2 3 4 5 6 enum MemberLevel { gold, silver, copper }
枚举值获取
一般获取的时候包括获取变量和变量值默认情况下第一个枚举数的值为 0后面每个枚举数的值依次递增 1。直接使用Enum中的静态方法即可操作.GetValues中获取的是枚举变量的值类型是枚举名之后自动输出的是枚举名. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 string s Enum.GetName(typeof(MemberLevel), 3); Console.WriteLine(s); Console.WriteLine(MemberLevel中的值:); foreach (int i in Enum.GetValues(typeof(MemberLevel))) Console.WriteLine(i); Console.WriteLine(MemberLevel中的值(注意类型):); foreach (MemberLevel i in Enum.GetValues(typeof(MemberLevel))) Console.WriteLine(i); Console.WriteLine(MemberLevel中的变量:); foreach (string str in Enum.GetNames(typeof(MemberLevel))) Console.WriteLine(str); System.Console.Read();
枚举类型
曾经很长的一段时间自己一度以为枚举的值只能是int类型其实每种枚举类型都有基础类型该类型可以是除 char以外的任何整型(重点)。 枚举元素的默认基础类型为 int.准许使用的枚举类型有 byte、sbyte、short、ushort、int、uint、long 或 ulong。如果枚举值为long如下所示: 1 2 3 4 5 6 enum MemberLevel:long { gold 2147483648L, silver232L, copper10L }
枚举Flags和Description特性值
可以使用枚举类型定义位标志从而使该枚举类型的实例可以存储枚举数列表中定义的值的任意组合。创建位标志枚举的方法是应用 System.FlagsAttribute 特性并适当定义一些值以便可以对这些值执行 AND、OR、NOT 和 XOR 按位运算。一般情况下如果零值不表示“未设置任何标志”则请不要为标志指定零值. 1 2 3 4 5 6 7 8 9 10 [Flags] enum MemberLevel { [Description(二进制表示为1----0001)] gold 0x1, [Description(二进制表示为4----0010)] silver 0x04, [Description(二进制表示为16----0100)] copper 0x10 } 程序运行如下所示 1 2 3 4 5 // 0001(Gold) and 0100(silver) 0101(5). MemberLevel options MemberLevel.gold | MemberLevel.silver; Console.WriteLine(options); Console.WriteLine((int)options); System.Console.Read(); 上面的基本上属于入门的知识在项目中通常用到的是在枚举变量上面加上Description需要显示的枚举的特性值枚举的值一般为int在数据库中占用空间比较小枚举的变量用于给数据库中的字段赋值那么如果要显示字段就需要考虑到Descripttion特性显示中文名称例如一个用户的的等级在数据中存储的是1显示的时候显示为金牌用户当然也可以使用switchif..else..去判断如果枚举比较多自己写的也很不爽.特性这个时候刚发挥作用了如下所示: 1 2 3 4 5 6 7 8 9 10 [Description(会员等级)] enum MemberLevel { [Description(金牌会员)] gold 1, [Description(银牌会员)] silver 2, [Description(铜牌会员)] copper 3 }
首先来写一个扩展静态类静态方法this关键字istop主要是用来获取枚举上面的描述. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 public static class EnumHelper { /// summary /// 返回枚举项的描述信息。 /// /summary /// param namevalue要获取描述信息的枚举项。/param /// returns枚举想的描述信息。/returns public static string GetDescription(this Enum value, bool isTop false) { Type enumType value.GetType(); DescriptionAttribute attr null; if (isTop) { attr (DescriptionAttribute)Attribute.GetCustomAttribute(enumType, typeof(DescriptionAttribute)); } else { // 获取枚举常数名称。 string name Enum.GetName(enumType, value); if (name ! null) { // 获取枚举字段。 FieldInfo fieldInfo enumType.GetField(name); if (fieldInfo ! null) { // 获取描述的属性。 attr Attribute.GetCustomAttribute(fieldInfo,typeof(DescriptionAttribute), false) as DescriptionAttribute; } } } if (attr ! null !string.IsNullOrEmpty(attr.Description)) return attr.Description; else return string.Empty; } } 主程序调用如下所示 1 2 3 MemberLevel gold MemberLevel.gold; Console.WriteLine(gold.GetDescription()); System.Console.Read();