数据库类型枚举(Enum)使⽤总结
1、定义枚举
定义枚举很简单,直接使⽤enum关键字声明即可,例如定义性别的枚举,性别只有男和⼥
public enum Sex
{
⼥ = 0,//’0‘是’⼥‘对应的内部表⽰,也可以说是⼥的Value,’⼥‘是外部表⽰,也可以说是Name
男 = 1,
}
2.使⽤枚举
代码
3.通常我们在数据库中,很多的⼀些状态、类型、性别等等字段保存的是数字,但我们在开发时需要判断这些状态时,直接使⽤
if(UserInfo.Sex==0)这种⽅式来判断,显然不太好,如果状态多时,⾃⼰都难分辨哪个数字代表什么状态。并且代码也不可观,我们在写代码时应该尽量少写硬代码。如果使⽤枚举定义,数据库存储的枚举对应的值,⽽在写代码时使⽤枚举的名称,这样⼀看代码就知道数据库储值的是什么状态。⾮常清楚明了。
4.UI层显⽰枚举的名称。如果数据库存储的是枚举的值(为数字),⽽在UI上当然不能已数字的⽅式显⽰,应该显⽰对应的枚举名称。例如在⼀个⽤户信息列表中需要绑定⽤户性别(枚举为上述的Sex),那该如何显⽰枚举的名称呢?⼀下提供多种⽅式
3.1:GridView控件绑定数据源为例,可以添加⼀列模板项,通过值获取枚举名称
代码
1 <asp:TemplateField HeaderText="性别">
2 <ItemTemplate>
3 <%#(枚举所在命名空间.Sex)Convert.ToInt32(Eval("Sex"))%>
4 </ItemTemplate>
5</asp:TemplateField>
3.2: 通过Enum对象获取名称
代码
1 <asp:TemplateField HeaderText="性别">
2 <ItemTemplate>
3 <%#Enum.GetName(typeof(枚举所在命名空间.Sex), Convert.ToInt32(Eval("Sex")))%>
4 </ItemTemplate>
5 </asp:TemplateField>
还有很多⽅式来处理这个问题,⼤家可以⾃由选择。
5.枚举的‘⾼级⽤法’组合运⽤:例如⼀个界⾯⾥有:增、删、查、改等操作,但对应不同⽤户就有不同操作权限。例如A⽤户只能增、删,⽽B⽤户只能查、改等等。如果在权限表中某⼀个字段类型指定⽤户的操作权限时,问题就出来了。来看看⼀下3种解决⽅式:
1.每个操作权限⼀条数据,缺点:每次更改权限时,避免不了删除和新增,并且数据量庞⼤,如果⼀个⽤户有⼀千权限就代表有⼀千条数据,那这张表的数据就不敢想象了。
2.⼀个字段存储所有的操作权限,每个操作权限使⽤某个指定的符号作为分隔符,这种⽅式叫简单、⽅便。
3.就是使⽤我们的枚举组合,在⼀个字段存储所有的操作权限,但值只为⼀个数,不像⽅式2使⽤分隔符分开。
当然,还有很多⽅式可以解决这种问题。我们现在就来看看如何使⽤枚举组合来代表多个操作权限。
5.1:定义⼀个操作权限枚举:
[Flags]//必须打上⼀个标记,打上这个标记系统才能识别这个枚举可使⽤组合⽅式
public enum Role
{
未分配=0,
删除数据 = 1,
修改数据 = 2,
新增数据 = 4,
查看数据 = 8,
}
5.2:如果⽤户有删除、修改的权限在枚举定义中只有1和2的枚举,那怎么将这两个枚举值组合成⼀个枚举值存储到数据库呢?很简单,看⼀下代码:
int allRole = ((int)Role.删除数据) + ((int)Role.修改数据);
//这时allRole的值为3 (两个枚举对应值相加:1+2=3),这时直接将allRole值存储到数据就可以了
现在我们就来判断⽤户是否具有某个操作权限,先从数据库中取出权限值,以上述,allRole则为数据库中取出的值,为3,接下来我们通过位算符来判断:
代码
Role myAllRole = (Role)allRole;//将int值强制转换为枚举
//此时,myAllRole的名称为 ‘ 删除数据, 修改数据 ’ ,值为3
//判断是否有删除权限
if ((myAllRole & Role.删除数据) == Role.删除数据)
{
enum c++//有
}
注意此处使⽤了位算符& ⽅式来获取判断,关于位算符的使⽤在此就不讲了。组合运⽤⼤概就是这样。必须注意的地⽅就是枚举值的定义,我们可以看到Role枚举的定义值的规律,0到1,1到2,2到4,4到8,8到16......当前的值为上个值的2次⽅,为什么要这样定义呢?是因为任何的组合都可以在枚举范围中某⼏个值的总和,例如组合值为15,那15就等于枚举定义范围⾥的定义值为1、2、4、8相
加,15=1+2+4+8。只有按规律定义值,就可以组合成任意数。
组合必须注意的⼏点:
1.枚举定义时,必须打上[Flags]标记,系统才会根据这个标记来决定这个枚举是否可组合使⽤
2.定义枚举的值必须按以上所说的规律定义,例如:0、1、2、4、8、16、32.......也可以使⽤3次⽅的⽅式,例如:0、3、6、12、24..........
6.使⽤优点总结
1.规则性:例如数据库某个字段的值只在1、2、3、4,例如状态,当我们在录⼊数据时,我们可以从枚举中取值,这样避免了这个字段出现其它值,同时也使代码更容易理解,因为在取值时,我们是拿枚举定义的名称,名称是我们⾃定义的易理解的中⽂或英⽂。
2.易解性:就是上述所说的,枚举名称是⽤中⽂和英⽂来定义,在使⽤时,则拿枚举的名称,这样⼀看代码就知道。⽽不会在代码中写1、2、3、4这样的数字,也许过段时间⾃⼰写的都忘了了1代表什么?2代表什么?了,更何况⽇后他⼈的维护呢。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论