位枚举的学习

枚举在开发中是很有用的,就以位枚举在权限设计中为例.

1.定义一个enum

  加[Flags]的标记,表示是位枚举,同时枚举中的值还必须是2的幂.

    [Flags]//位枚举的Attribute
    enum Roles//值必须为2的幂
    {
        //none=0,
        admin = 1,
        user = 2,
        guest = 4
        //all=admin|user|guest//所有
    }

2.使用以下两个方法可以获取枚举中的值和名称,

当然你可以将它们作为datasource绑定到前台的checkBoxList,dropDownList

int[]intRoles = Enum.GetValues(typeof(Roles))//获取该枚举所有项的值 
string[]strRoles = Enum.GetNames(typeof(Role))//获取该枚举所有项的名称

3.对枚举进行操作

|是位或操作,&是位与操作,^是位或操作;

代码:

Roles role = (Roles)3;//将int值转换为枚举
role = role | Roles.admin | Roles.user;//通过位或操作为该角色添加权限
role = role ^ Role.admin;//通过位非操作删除admin权限

int intRole = Convert.ToInt32(roles);//将枚举转为int值,可以存入数据库

List<Roles> roles = GetEnum(role);//从数据库中取出int值,将其转换出Roles的list表


 /// <summary>
 /// 获取角色列表list
 /// </summary>
 /// <param name="role"></param>
 /// <returns></returns>
 public static List<Roles> GetEnum(Roles role)
 {
    List<Roles> roles = new List<Roles>();
    foreach (int i in Enum.GetValues(typeof(Roles)))
    {
         if ((role & (Roles)i) != 0)
         {
            roles.Add((Roles)i);
         }
   }
   return roles;
}

注:本来想将GetEnum方法写成泛型版本,奈何system.Enum不能用于泛型约束!

 

 

 

  

转载于:https://www.cnblogs.com/edwardloveyou/archive/2012/06/27/2565577.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值