标志枚举

Posted 银狐U3D游戏开发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了标志枚举相关的知识,希望对你有一定的参考价值。

标志枚举

标志枚举要在顶部加[System.Flags]特性进行声明。而且枚举支持组合运算。先来看个例子

   class Program
    {

   [System.Flags]
    public enum Week
    { 
        白 = 1,  //001
        富 = 2,  //010
        美 = 4,  //100
    }
        static void Main(string[] args)
        {
            var man = Week.白 | Week.美;  //赋值为101    计算方法001或上100,结果是101
            Console.WriteLine((int)man);
            if ((man & Week.白) == Week.白)       //101 man 
            {                                    //001 白 逐位相与,
                Console.WriteLine("此人白");      //001 如果结果是白,就可以反推出man包含 白
            }
            else
            {
                Console.WriteLine("此人黑");
            }
            Console.ReadKey();
        }
    }

 

  这种位运算是非常有用的,在sql语句里也支持位运算。也就是说,把一个枚举运算后的结果存入数据库之后,还能够按照你的要求读取出来。比如:

  将一个"白美"存如数据库的值存入数据库,那么存入去的就是整型5。

  那么我想读出所有的"白"数据列表怎么读呢?白,可以是纯白"1",也是是白富3,可以是白美5,也可以是白富美7,你可以用in来读,但是更好的方法是在sql语句中同样使用位运算。

 

select * from Table1 where Tag & 1 = 1  //Tag是列名

select * from Table1 where  Tag | 1 = Tag

以上是关于标志枚举的主要内容,如果未能解决你的问题,请参考以下文章

第十五章 枚举类型和位标志

标志枚举

14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足19.class文件--文件结构--魔数20.文件结构--常量池21.文件结构访问标志(2个字节)22.类加载机制概(代码片段

打印标志枚举作为单独的标志

带有红宝石集合/可枚举的酷技巧和富有表现力的片段[关闭]

带有标志属性的 Enum.TryParse