如何正确的在c#项目中使用枚举

  介绍

本篇文章给大家分享的是有关如何正确的在c#项目中使用枚举,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

枚举基础

枚举类型的作用是限制其变量只能从有限的选项中取的值,这些选项(枚举类型的成员)各自对应于一个数字,数字默认从0开始,并以此递增,例如:

public  enum 天   {   ,周日,周一,周二,,//,…   }

其周日的中值是0,周一是1,以此类推。为了一眼能看出每个成员代表的值,一般推荐显示地将成员值写出来,不要省略:

public  enum 天   {=,Sunday  0,, Monday =, 1, Tuesday =,,,//,…   }

c#枚举成员的类型默认是int类型,通过继承可以声明枚举成员为其它类型,比如:

public  enum  Days :字节   {   ,Monday =, 1,=,Tuesday  2,=,Wednesday  3,=,Thursday  4,=,Friday  5,=,Saturday  6,   Sunday =, 7   }

枚举类型一定是继承自字节,sbyte,短,ushort, int,单位,长和ulong中的一种,不能是其它类型。下面是几个枚举的常见用法(以上面的天枚举为例):

//,枚举转字符串   string  foo =, Days.Saturday.ToString ();,//,“Saturday"   string  foo =, Enum.GetName (typeof(天),6),,//,“Saturday"//,字符串转枚举   Enum.TryParse (“Tuesday", out  Days  bar),,//,,, bar =Days.Tuesday   (天)Enum.Parse (typeof(天),“Tuesday");,//Days.Tuesday//,枚举转数字   byte  foo =,(字节)Days.Monday;//, 1//,数字转枚举   Days  foo =,(天)2,,//Days.Tuesday//,获取枚举所属的数字类型   Type  foo =, Enum.GetUnderlyingType (typeof(天))),,//System.Byte//,获取所有的枚举成员   Array  foo =, Enum.GetValues (typeof (MyEnum);//,获取所有枚举成员的字段名   时间=string [], foo  Enum.GetNames (typeof(天));

另外,值得注意的是,枚举可能会得到非预期的值(值没有对应的成员)。比如:

Days  d =,(21天),,//,不会报的错   Enum.IsDefined (typeof(天),d);,//,假

即使枚举没有值为0的成员,它的默认值永远都是0。

var  z =,违约(天),,//,0

枚举可以通过描述,显示等特性来为成员添加有用的辅助信息,比如:

public  enum  ApiStatus   {   ,(描述(“成功“))=,OK  0,   ,(描述(“资源未找到“))=,NotFound  2,   ,(描述(“拒绝访问“))   AccessDenied =, 3   }      static  class  EnumExtensions   {   ,public  static  string  GetDescription(却;能够Enum  val)   ,{   var 才能;field =, val.GetType () .GetField (val.ToString ());   var 才能;customAttribute =, Attribute.GetCustomAttribute(字段,typeof (DescriptionAttribute));   if 才能;(customAttribute ==, null), {, return  val.ToString ();,}   {else 才能;return  ((DescriptionAttribute) customAttribute) .Description;,}   ,}   }      static  void  Main (string [], args)   {   ,Console.WriteLine (ApiStatus.Ok.GetDescription());,//,“成功”;   }

上面这些我认为已经包含了大部分我们日常用到的枚举知识了。下面我们继续回到文章开头说的用户角色存储问题。

用户角色存储问题

我们先定义一个枚举类型来表示两种用户角色:

public  enum 角色   {   ,Admin =, 1,   Member =, 2   }

这样,如果某个用户同时拥有管理员和会员两种角色,那么用户表的角色字段就应该存3。那问题来了,此时若查询所有拥有管理角色的用户的SQL该怎么写呢?对于有基础的程序员来说,这个问题很简单,只要用位操作符逻辑与(“,& # 39;)来查询即可。

SELECT  *,得到“用户”,WHERE “角色”,,1,=,1;

同理,查询同时拥有这两种角色的用户,SQL语句应该这么写:

SELECT  *,得到‘用户’,WHERE ‘角色’,,3,=,3;

对这条SQL语句用c#来实现查询是这样的(为了简单,这里使用了衣冠楚楚的):

public  class 用户   {   ,public  int  Id {组,得到,,,}   ,public  Roles  Roles {组,得到,,,}   }      connection.Query

如何正确的在c#项目中使用枚举