【转】C#中枚举类型与静态变量

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 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,

    silver=232L,

    copper=10L

}

枚举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,显示的时候显示为金牌用户,当然也可以使用switch,if..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 name="value">要获取描述信息的枚举项。</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), falseas 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();

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java程序员_Java程序员工资为什么这么高?

众多行业中&#xff0c;程序员当然属于高薪职业。无论是国内还是国外&#xff0c;IT行业的程序员、工程师&#xff0c;甚至连码农都要比其他行业的从业者的收入高很多&#xff01;尤其是作为IT界的“常青树”Java&#xff0c;原因是什么&#xff1f;01Java行业市场需求存在巨大…

innodb存储引擎 - 锁

MySQL技术内幕&#xff1a;Innodb存储引擎 (间隙锁目前理解的还不是很透彻&#xff0c;后面索引看完了再过来回顾一下间隙锁) 第六章 锁 一、Innodb存储引擎中的锁 1.锁是数据库区别于文件系统的一个关键特性&#xff0c; 2.两种标准的行级锁&#xff1a; 共享锁(S Lock)…

【转】深入浅出OOP(六): 理解C#的Enums

MSDN定义&#xff1a;枚举类型&#xff08;也称为枚举&#xff09;为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。 例如&#xff0c;假设您必须定义一个变量&#xff0c;该变量的值表示一周中的一天。 该变量只能存储七个有意义的值。 若要定义这些值&#xff…

usb接口供电不足_AMD RX 6000 系列显卡配备USB-C 接口,支持外接供电

IT之家 10 月 29 日消息 根据 AMD 的官方信息&#xff0c;新发布的 RX 6000 系列显卡进一步增强了显示能力&#xff0c;配备了 HDMI 2.1 接口、DP 1.4 接口和 USB-C 接口。AMD 表示&#xff0c;AMD Radeon 6000 系列显卡全部搭载 HDMI 2.1 VRR 接口&#xff0c;超大带宽支持最高…

【转】VS2005键盘布局_快捷键大全(总结了一些记忆的口诀)

VS快捷键对提高生产力有莫大帮助&#xff0c;本文将所有快捷键进行了重新整理归类&#xff0c;便于记忆。有缺失&#xff0c;不足之处&#xff0c;还请大家指出&#xff0c;谢谢 1、窗口快捷键 &#xff08;W代表Windows也就是窗口的意思&#xff09; CtrlW,A: 命令窗口&#…

int与byte转换(四字节)

public byte[] intToByte(int res) {byte[] targets new byte[4];targets[0] (byte) (res & 0xff);// 最低位targets[1] (byte) ((res >> 8) & 0xff);// 次低位targets[2] (byte) ((res >> 16) & 0xff);// 次高位targets[3] (byte) (res >>…

mac securecrt程序无响应_如何重置mac上的系统管理控制器smc教程

虽然mac是一款十分高端的个人笔记本电脑&#xff0c;但是mac也会有出现故障的时候&#xff0c;比如风扇高速转动、键盘背光灯行为有些异常异常等等&#xff0c;那极有可能是你的系统管理控制器smc出现了问题&#xff0c;所以今天小编就来科普大家如何重置系统管理控制器smc。如…

bootstraptable treeGrid 懒加载_Java类加载机制及自定义加载器

一&#xff1a;ClassLoader类加载器&#xff0c;主要的作用是将class文件加载到jvm虚拟机中。jvm启动的时候&#xff0c;并不是一次性加载所有的类&#xff0c;而是根据需要动态去加载类&#xff0c;主要分为隐式加载和显示加载。隐式加载&#xff1a;程序代码中不通过调用Clas…

【转】WCF、WebAPI、WCFREST、WebService之间的区别

在.net平台下&#xff0c;有大量的技术让你创建一个HTTP服务&#xff0c;像Web Service&#xff0c;WCF&#xff0c;现在又出了Web API。在.net平台下&#xff0c;你有很多的选择来构建一个HTTP Services。我分享一下我对Web Service、WCF以及Web API的看法。 Web Service 1、它…

Idea打可执行jar包

前些日子试了下idea打包&#xff0c;有些细节没太注意所以经常打包失败&#xff0c;要不然就是显示没有主清单属性&#xff0c;所以一直用eclipse打包&#xff0c;今天又重新捣鼓了一下&#xff0c;写下过程&#xff1a; 1. 先添加需要打jar包的主入口 第三步一定不要放在main…

正则表达式:获取一串字符串中,某个字符串到某个字符串之间的字符串,不包含左右,只取中间

表示取出"EventType":" 到 "之间的字符串&#xff0c;非贪婪匹配 (?<"EventType":").*?(?")如果后面"也换成字符串的话&#xff0c;就把?换成?<即可 例子如下&#xff1a; public String getPattern(String str,Str…

安卓系统挂载NTFS格式硬盘_Mac 读写 NTFS硬盘管理开源工具NTFSTool

NTFSTool是Mac OS 下一款开源的 NTFS 磁盘格式读写工具&#xff0c;基于Electron和VUE编写。遵守MIT开源协议。支持 NTFS 磁盘读写、挂载&#xff0c;退出、管理等功能。系统检测到插入移动硬盘后&#xff0c;会自动弹出 NTFSTool 界面&#xff0c;并自动挂载硬盘。安装NTFSToo…

【转】刨根究底字符编码之九——字符编码方案的演变与字节序

字符编码方案的演变与字节序 一、字符编码方案的演变 1. 根据前面的介绍&#xff0c;对于字符编码方案的演变&#xff0c;我们大致上可简单地划分为三个阶段&#xff1a; ① ASCII编码方案阶段 → ② ANSI编码方案阶段 → ③ Unicode/UCS编码方案阶段。 在第一个阶段的ASCII…

python人工智能_人工智能人才缺口千万!学Python抓住风口机会

前不久教育界的一个消息&#xff0c;引发了广泛的关注。今年9月&#xff0c;浙江三到九年级信息技术课将替换新教材&#xff0c;八年级将新增Python课程内容。新高一信息技术编程语言由VB替换为Python&#xff0c;大数据、人工智能、程序设计与算法按照教材规划五六年级开始接触…

【转】刨根究底字符编码之十——Unicode字符集的字符编码方式

一、字符编码方式CEF的选择 1. 由于Unicode字符集非常大(并且作为开放字符集还在不断扩展之中)&#xff0c;有些字符的编号(即码点值)需要两个或两个以上字节来表示&#xff0c;而要对这样的编号进行编码&#xff0c;也必须使用两个或两个以上字节。 比如&#xff0c;汉字“…

ip和端口正则表达式

ip&#xff1a;来自站长工具 ^(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)$MAC地址&#xff1a; ^[A-F0-9]{2}(-[A-F0-9]{2}){5}$|^[A-F0-9]{2}…

【转】刨根究底字符编码之十一——UTF-8编码方式与字节序标记BOM

一、UTF-8编码方式 1. 接下来将分别介绍Unicode字符集的三种编码方式&#xff1a;UTF-8、UTF-16、UTF-32。这里先介绍应用最为广泛的UTF-8。 为满足基于ASCII、面向字节的字符处理的需要&#xff0c;Unicode标准中定义了UTF-8编码方式。UTF-8应该是目前应用最广泛的一种Unic…

流水灯verilog实验原理_IC设计实例解析之“流水线技术”

源自&#xff1a;微信公众号 “数字芯片实验室”在IC设计中&#xff0c;如果寄存器之间的组合逻辑延时过大&#xff0c;可能会称为设计中的关键路径&#xff0c;从而降低整个电路的工作频率。如下图所示&#xff0c;是一个输入和输出寄存的算术计算逻辑。在set_input_delay和se…

【转】刨根究底字符编码之十二——UTF-8究竟是怎么编码的

UTF-8究竟是怎么编码的 1. UTF-8编码是Unicode字符集的一种字符编码方式(CEF)&#xff0c;其特点是使用变长字节数(即变长码元序列或称变宽码元序列)来编码。目前一般是1到4个字节&#xff0c;当然&#xff0c;也可以更长。 为什么要变长呢&#xff1f;这可以理解为按需分配…