zoukankan      html  css  js  c++  java
  • 位枚举的学习

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

    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不能用于泛型约束!

      

  • 相关阅读:
    【基本知识】verilog中 `define 的使用
    netsuite弹出窗体的数据回传例子
    js使用confirm对用户的行为进行判断 和prompt
    银行支付 接口
    关于IT公司的预见性
    js fix小数点 和int的区别
    ajax和Java session监听
    NetSuite全功能介绍 totemsuite netsuite开发模块
    财务软件间的财务接口(转载)
    去除eclipise f2功能 去除浮动窗口
  • 原文地址:https://www.cnblogs.com/edwardloveyou/p/2565577.html
Copyright © 2011-2022 走看看