zoukankan      html  css  js  c++  java
  • 枚举Enum

    当我们用反射的时候,需要指定绑定标志,如下:

    FieldInfo field = obj.GetType().GetField(name, BindingFlags.Instance | BindingFlags.GetField | BindingFlags.NonPublic);

    在MSDN里面有这样一句话:“用2的幂(即 1、2、4、8 等)定义枚举常量。这意味着组合的枚举常量中的各个标志都不重叠。

    我们看下BingingFlags的定义:他就是按照MSDN上的说法定义的,我们来看看有什么用

     

    Default 表示不指定!

    定义一个枚举:

    enum ColorEnum 
    {
            Red = 1, Green = 2, Blue = 4, Yellow = 8
    }

    获取传入的枚举值:(如果枚举不定义成2的幂次方,是无法获取正确传的值的!)

    如果枚举定义成  Red = 1, Green = 2, Blue = 4, Yellow = 3  是会报错的(测试发现)!

    定义成  Red = 1, Green = 2, Blue = 4, Yellow = 6 输出的值是和传入的值是不相同的!

    而枚举定义成2的幂次方,那么无论成员是什么顺序,值的跨度多大也不会出错!依旧输出正确的值!

               ColorEnum color_2 = ColorEnum.Red | ColorEnum.Green | ColorEnum.Yellow;
    
                string num = color_2.ToString();//输出为数值 11
    
                List<double> list = new List<double>();
                String binary = Convert.ToString(Convert.ToInt32(num), 2); //2表示把11转换成二进制数据  为1011
                int index = binary.Length - 1;  //循环的次数
                foreach (char ch in binary) {
                    if (ch == '1') {
                        list.Add(Math.Pow(2, index));  //算出二进制为1的每一位的2的幂次方
                    }
                    index--;
                }
                foreach (var item in list) {
                    ColorEnum c = (ColorEnum)Enum.Parse(typeof(ColorEnum), item.ToString());
                    Console.WriteLine(c.ToString());//输出 yellow green red
                }
  • 相关阅读:
    浅谈3次登录错误
    JDK一键安装,配置环境
    火炬之光2_辅助工具 内存读写相关
    学习资料
    如何在google colab加载kaggle数据
    Trie树
    日常
    Kmeans
    【leet-code】135. 加油站
    Mac CLion下OpenGL环境配置
  • 原文地址:https://www.cnblogs.com/MrZivChu/p/enum.html
Copyright © 2011-2022 走看看