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(',');
            }
    
  • 相关阅读:
    700. Search in a Binary Search Tree
    100. Same Tree
    543. Diameter of Binary Tree
    257. Binary Tree Paths
    572. Subtree of Another Tree
    226. Invert Binary Tree
    104. Maximum Depth of Binary Tree
    1、解决sublime打开文档,出现中文乱码问题
    移植seetafaceengine-master、opencv到ARM板
    ubuntu16.04-交叉编译-SeetaFaceEngine-master
  • 原文地址:https://www.cnblogs.com/magic_evan/p/1941901.html
Copyright © 2011-2022 走看看