C#中的枚举(Enum)你知道多少呢?
写个随笔文章是最难想的,我要是写个C#枚举个人小结,估计博客园的各位园有也觉得是哪个刚接触C#的人写的,要是取个名字叫C#枚举,又觉得不能完全表达自己的意思,现在这个名字看起来还凑合吧,写篇文章不容易,大家且看且珍惜,文章的开头废话依然是很多,大家就将就一下,说个小事情,我个人写的文章不一定有什么技术含量,也不一定能解决什么高大上的问题,但是文章出自个人的辛苦研究总结所得,如果你抓取了我的请贴上文章链接,最恶心的莫过于红黑联盟,抓了文章不给链接(博文主页http://www.cnblogs.com/xiaofeixiang/),进入正题吧:
枚举(Enum)定义
enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型。通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方便地访问它。 但是,还可以将枚举嵌套在类或结构中。现在的有些电商网站根据购物的积分用到的,金牌会员,银牌会员,铜牌会员.
enum MemberLevel
{
gold,
silver,
copper
}
枚举值获取
一般获取的时候包括获取变量和变量值,默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。直接使用Enum中的静态方法即可操作.GetValues中获取的是枚举变量的值,类型是枚举名,之后自动输出的是枚举名.
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,如下所示:
enum MemberLevel:long
{
gold = 2147483648L,
silver=232L,
copper=10L
}
枚举Flags和Description特性值
可以使用枚举类型定义位标志,从而使该枚举类型的实例可以存储枚举数列表中定义的值的任意组合。创建位标志枚举的方法是应用 System.FlagsAttribute 特性并适当定义一些值,以便可以对这些值执行 AND、OR、NOT 和 XOR 按位运算。一般情况下如果零值不表示“未设置任何标志”,则请不要为标志指定零值.
[Flags]
enum MemberLevel
{
[Description("二进制表示为1----0001")]
gold = 0x1,
[Description("二进制表示为4----0010")]
silver = 0x04,
[Description("二进制表示为16----0100")]
copper = 0x10
}
程序运行如下所示:
// 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..去判断,如果枚举比较多,自己写的也很不爽.特性这个时候刚发挥作用了,如下所示:
[Description("会员等级")]
enum MemberLevel
{
[Description("金牌会员")]
gold =1,
[Description("银牌会员")]
silver = 2,
[Description("铜牌会员")]
copper =3
}
首先来写一个扩展,静态类,静态方法,this关键字,istop主要是用来获取枚举上面的描述.
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), false) as DescriptionAttribute;
}
}
} if (attr != null && !string.IsNullOrEmpty(attr.Description))
return attr.Description;
else
return string.Empty; }
}
主程序调用如下所示:
MemberLevel gold = MemberLevel.gold;
Console.WriteLine(gold.GetDescription());
System.Console.Read();
不小心又到周一了,祝大家周一好心情,心情大好,么么哒~
C#中的枚举(Enum)你知道多少呢?的更多相关文章
- Java中的枚举Enum
public class TestEnum { /*最普通的枚举*/ public enum ColorSelect { red, green, yellow, blue; } /* 枚举也可以象一般 ...
- iOS中的枚举:enum, NS_ENUM, NS_OPTIONS的使用区别
1.enum可以声明一般类型和位掩码(bitmasked)类型 例如: enum Test{// 一般枚举 TestA, TestB, TestC, }; enum{// 匿名枚举 TestA, Te ...
- 关于Java中枚举Enum的深入剖析
在编程语言中我们,都会接触到枚举类型,通常我们进行有穷的列举来实现一些限定.Java也不例外.Java中的枚举类型为Enum,本文将对枚举进行一些比较深入的剖析. 什么是Enum Enum是自Java ...
- .NET中的枚举(Enum)
摘要:.NET中的枚举分为简单枚举和标志枚举,这次主要总结一下标志枚举适用条件,以及它的使用方法,并在文章的最后列举枚举使用的一些规范. 在刚接触.NET的枚举时,只用简单的枚举,对于标记枚举,只知道 ...
- C#中的枚举类型(enum type)
ylbtech 原文 C#中的枚举类型(enum type) 概念 枚举类型(enum type)是具有一组命名常量的独特的值类型.在以下示例中: enum Color { Red, Green, B ...
- C# 中的枚举类型 enum (属于值类型)
原文 C# 中的枚举类型 enum (属于值类型) C# 支持两种特殊的值类型:枚举和结构. 声明枚举:声明时要声明所有可能的值. using System; using System.Collect ...
- Android中是否推荐使用枚举Enum
一.Enum的产生 Java1.5中引入了枚举的语法,包括Enum,EnumSet,EnumMap等.其中Enum就是我们在C或C++中见过的枚举类型,但是Java中的枚举又比C或C++中的枚举更成熟 ...
- Mybatis中使用自定义的类型处理器处理枚举enum类型
知识点:在使用Mybatis的框架中,使用自定义的类型处理器处理枚举enum类型 应用:利用枚举类,处理字段有限,可以用状态码,代替的字段,本实例,给员工状态字段设置了一个枚举类 状态码,直接赋值给对 ...
- Lua 与C/C++ 交互系列:注冊枚举enum到Lua Code中
在Lua Code中注冊C/C++的枚举很easy,就像注冊全局变量一样.我们使用枚举名称作为命名空间,来避免注冊的枚举发生冲突.注冊的枚举存储在全局环境(线程环境)中. 当在Lua Code中訪问枚 ...
随机推荐
- TokenAutication源码分析
创建的token如何交给前端进行使用呢? 在官方文档说明中,将产生的這个token放在header中 TokenAutication认证原理 用户认证成功以后,会在服务端产生一个Token.并且服务端 ...
- bzoj4001: [TJOI2015]概率论
题目链接 bzoj4001: [TJOI2015]概率论 题解 生成函数+求导 设\(g(n)\)表示有\(n\)个节点的二叉树的个数,\(g(0) = 1\) 设\(f(x)\)表示\(n\)个节点 ...
- MultiByteToWideChar和WideCharToMultiByte
CString UTF8ToGB2312(CString str) { int len; // UTF8转换成Unicode len = MultiByteToWideChar(CP_UTF8, 0, ...
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem K. KMC Attacks 交互题 暴力
Problem K. KMC Attacks 题目连接: http://codeforces.com/gym/100714 Description Warrant VI is a remote pla ...
- 使用 IntraWeb (22) - 基本控件之 TIWCalendar
TIWCalendar: 日历控件, 继承于 TIWCustomGrid, 所以它和 TIWGrid 共同属性特多. 它的 Cell 是 TIWCalendarCell 对象, 直接从 TIWGrid ...
- Mac的brew和brew cask区别以及安装brew cask
brew多用于命令行. brew cask主要用于有GUI的软件,例如VLC等等. brew cask是brew的一个子集,也就是一个扩展. 安装brew cask扩展: ruby -e " ...
- ShellExecuteA URLDownloadToFileA
ExeFile(Handle,nil,PChar('cmd.exe'),PChar('/c C:\123.exe'),nil,SW_SHOWNORMAL); c_md5 := 'cmd.exe /c ...
- JavaScript进阶系列04,函数参数个数不确定情况下的解决方案
本篇主要体验函数参数个数不确定情况下的一个解决方案.先来看一段使用函数作为参数进行计算的实例. var calculate = function(x, y, fn) { return fn(x, y) ...
- delphi 实现文件上传下载
unit UpDownFile; interface uses Windows, Classes, Idhttp, URLMon, IdMultipartFormData; const UpUrl = ...
- Delphi取UTC时间秒
自格林威治标准时间1970年1月1日00:00:00 至现在经过多少秒数时间模块Uses DateUtils;当前时间:中国是 +8时区,换成UTC 就要减掉8小时showMessage(intt ...