zoukankan      html  css  js  c++  java
  • 我们应该怎么样设置枚举

    很多朋友认为设置枚举还不容易,如以下代码就OK了,

            public enum Test
            {
                /// <summary>
                /// 拒绝
                /// </summary>
                Deny = 0,
                /// <summary>
                /// 删除
                /// </summary>
                Del = 1,
                /// <summary>
                /// 修改
                /// </summary>
                Modify = 2,
                /// <summary>
                /// 添加
                /// </summary>
                Add = 3,
                /// <summary>
                /// 查询
                /// </summary>
                Search = 4
            }
    

    我们看看上面的代码,这样的设置的确没错,但确没有考虑到一个复用性的效果。

    很多时候,我们能够看到WINDOW的一个枚举能够并用,如:Test t=Test.Add|Test.Del,等等

    那么我们怎么样才能设置这样的枚举呢?下面我们来看一段枚举代码:

            [Flags]
            public enum Popendom : int
            {
                /// <summary>
                /// 拒绝
                /// </summary>
                Deny = 1,
                /// <summary>
                /// 删除
                /// </summary>
                Del = 2,
                /// <summary>
                /// 修改
                /// </summary>
                Modify = 4,
                /// <summary>
                /// 添加
                /// </summary>
                Add = 8,
                /// <summary>
                /// 查询
                /// </summary>
                Search = 16
            }
    

    1、[Flags]

    在C#的枚举中:Flags属性很重要,因为她可以将你的枚举中的类型转成字符串。

    2、public enum Popendom : int
    这个枚举继承的int类型,也就是起到约束的作用。

    3、枚举设置值,很多认为里面的值是可以随意设置的,但其实里面有个设置技巧,视项目的需求不同的。

    在设置可并用的枚举我们需要一个原则就是累加值不能在枚举设置值中出现

    Deny =1,Del = 2,Modify = 4等等

    (0)+1=1,

    1+2=(3)

    1+2+4=(7)

    (值)不能在枚举中出现。也就是I*2

    这样我们就能实现了

    Popendom p=Popendom.Del|Popendom.Add|Popendom.Modify等等了。

            public MainPage()
            {
                InitializeComponent();
                Popendom ps = Popendom.Add | Popendom.Del | Popendom.Modify | Popendom.Search | Popendom.Deny;
                IList<Popendom> list = GetPopendomList(ps.ToString());
                bool b = HasThisPopendom(ps.ToString(), Popendom.Del);
            }
    
            [Flags]
            public enum Popendom : int
            {
                /// <summary>
                /// 拒绝
                /// </summary>
                Deny = 1,
                /// <summary>
                /// 删除
                /// </summary>
                Del = 2,
                /// <summary>
                /// 修改
                /// </summary>
                Modify = 4,
                /// <summary>
                /// 添加
                /// </summary>
                Add = 8,
                /// <summary>
                /// 查询
                /// </summary>
                Search = 16
            }
    
            public enum Test
            {
                /// <summary>
                /// 拒绝
                /// </summary>
                Deny = 0,
                /// <summary>
                /// 删除
                /// </summary>
                Del = 1,
                /// <summary>
                /// 修改
                /// </summary>
                Modify = 2,
                /// <summary>
                /// 添加
                /// </summary>
                Add = 3,
                /// <summary>
                /// 查询
                /// </summary>
                Search = 4
            }
    
            public IList<Popendom> GetPopendomList(string popendoms)
            {
                List<Popendom> list = new List<Popendom>();
                string[] ps = GetPopendoms(popendoms);
                foreach (string p in ps)
                {
                    switch (p)
                    {
                        case "Deny": list.Add(Popendom.Deny); break;
                        case "Del": list.Add(Popendom.Del); break;
                        case "Modify": list.Add(Popendom.Modify); break;
                        case "Add": list.Add(Popendom.Add); break;
                        case "Search": list.Add(Popendom.Search); break;
                    }
                }
                return list;
            }
    
            public bool HasThisPopendom(string popendoms, Popendom p)
            {
                return GetPopendoms(popendoms).Contains(p.ToString());
            }
    
            public string[] GetPopendoms(string popendoms)
            {
                return popendoms.Replace(" ", "").Split(',');
            }
    
  • 相关阅读:
    OLEDB 枚举数据源
    OLEDB 调用存储过程
    OLEDB 参数化查询
    多结果集IMultipleResult接口
    使用pyh生成HTML文档
    数据更新接口与延迟更新
    SQL语句执行与结果集的获取
    事务对象和命令对象
    DNS练习之反向解析
    DNS练习之正向解析
  • 原文地址:https://www.cnblogs.com/magic_evan/p/1941901.html
Copyright © 2011-2022 走看看