zoukankan      html  css  js  c++  java
  • ahjesus C# Flags 位域略说

    class Program {
        [Flags]
        public enum Week {
            [Description("星期一")]
            Monday = 1 << 0,//1
            [Description("星期二")]
            Tuesday = 1 << 1,//2
            [Description("星期三")]
            Wednesday = 1 << 2,//4
            [Description("星期四")]
            Tursday = 1 << 3,//8
            [Description("星期五")]
            Friday = 1 << 4,//16
            [Description("星期六")]
            Saturday = 1 << 5,//32
            [Description("星期日")]
            Sunday = 1 << 6//64
        }
    
        static void Main(string[] args) {
            //1.|表示两边求并集(元素相加,相同元素只出现一次)
            Week week = Week.Wednesday | Week.Monday | Week.Monday | Week.Tuesday;//Monday,Tuesday,Wednesday 
                
            //2.&表示两边是否其中一个是另外一个的子集,如果是返回子集,否则返回0
            //week = Week.Monday & week;//Monday
            //week = (Week.Sunday | Week.Monday | Week.Tuesday) & week;//Monday,Tuesday
            //week = Week.Sunday & week;//0
            //出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
            //3.^表示从两者的并集中去除两者的交集
            //week = Week.Monday ^ Week.Monday;//0
            //week = (Week.Monday | Week.Tuesday) ^ (Week.Tuesday | Week.Wednesday);//Monday,Wednesday
    
            //4.~表示取补,按二进制每4位一组,不足4位最左边补0,然后1变0,0变1,用法主要和&一起使用去除其中的某个元素
            //week = ~Week.Wednesday;//-5
            //week = week & (~Week.Monday); //Monday,Tuesday
    
            //存入数据库可以转换为int,从数据库中读出来可以转换为枚举
            //week = Week.Monday  | Week.Tuesday;
            //int i = (int)week;//3
            //week = (Week)Enum.Parse(typeof(Week), "3");//Monday,Tuesday
    
    
            NameValueCollection nvc = GetNVCFromEnumValue(typeof(Week));
            foreach (string key in nvc.AllKeys)
            {
                Console.WriteLine(key + ":" + nvc[key]);
            }
                
            Console.ReadKey();
        }
    
        /// < summary>  
        /// 从枚举类型和它的特性读出并返回一个键值对  
        /// < /summary>  
        /// < param name="enumType">Type,该参数的格式为typeof(需要读的枚举类型)< /param>  
        /// < returns>键值对< /returns>  
        public static NameValueCollection GetNVCFromEnumValue(Type enumType) {
            NameValueCollection nvc = new NameValueCollection();
            Type typeDescription = typeof(DescriptionAttribute);
            System.Reflection.FieldInfo[] fields = enumType.GetFields();
            string strText = string.Empty;
            string strValue = string.Empty;
            foreach (FieldInfo field in fields) {
                if (field.FieldType.IsEnum) {
                    strValue = ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)).ToString();
                    object[] arr = field.GetCustomAttributes(typeDescription, true);
                    if (arr.Length > 0) {//出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
                        DescriptionAttribute aa = (DescriptionAttribute)arr[0];
                        strText = aa.Description;
                    }
                    else {
                        strText = field.Name;
                    }
                    nvc.Add(strText, strValue);
                }
            }
            return nvc;
        } 
    }
  • 相关阅读:
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第4章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第3章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第1,2章 读书笔记(待更新)
    Tkinter的Message组件
    Git 实操/配置/实践
    mysq5.7.32-win安装步骤
    行为型模式之模板方法
    结构型模式之组合模式
    结构型模式之享元模式
    结构型模式之外观模式
  • 原文地址:https://www.cnblogs.com/ahjesus/p/3461427.html
Copyright © 2011-2022 走看看