可以使用一个整数代表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
};
{
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;
{
this.settings = (int)settings;
}
{
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
}
}
}
{
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;
for(int i=0;i<8;i++)
{
Console.WriteLine(bits[i]);
}
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