介绍用户角色存储问题
本篇文章给大家分享的是有关如何正确的在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#项目中使用枚举