现在的位置: 首页 > 综合 > 正文

结合枚举类型和异或操作实现开关 –使代码更清晰

2012年11月13日 ⁄ 综合 ⁄ 共 1339字 ⁄ 字号 评论关闭
可以使用一个整数代表32个独立的布尔标记,综合用枚举类型和位的异或操作可以方便的设置每个布尔标记,用来作为开关。每个枚举值代表一个开关true or false。
标记开关主要用在权限系统中,用来表现一个用户具有何种权限。

示例如下:

 public enum Bitwise : int
    {
        Setting1 
= 1,   //0000 0001
        Setting2 = 2,   //0000 0010
        Setting3 = 4,   //0000 0100
        Setting4 = 8,   //0000 1000
        Setting5 = 16,  //0001 0000
        Setting6 = 32,  //0010 0000
        Setting7 = 64,  //0100 0000
        Setting8 = 128//1000 0000
    };

该结构体具有设置获取指定Bitwise值的方法

public struct IntAsBits
    {
        
int settings;

        public IntAsBits(Bitwise settings)
        {
            
this.settings = (int)settings;
        }

        public bool this[int index]
        {
            
get
            { 
//check the bit at index and return true or false
                return (settings & (1 << index)) != 0;
            }
            
set
            {
                
if (value)
                    settings 
|= (1 << index); //turns the bit at index on
                else
                    settings 
&= ~(1 << index); //turns the bit at index off
            }
        }
    }

具体使用 可以方便的获取和设置指定二进制的值

Bitwise settings = Bitwise.Setting2 | Bitwise.Setting4 | Bitwise.Setting8;

IntAsBits bits = new IntAsBits(settings);
for(int i=0;i<8;i++)
{
    Console.WriteLine(bits[i]);
}

优点:效率高 直观 便捷

摘自:http://dotnetslackers.com/articles/net/Bitwise_Operations_with_Enumerations.aspx

抱歉!评论已关闭.