所谓的位域就是说利用一个整形数字二进制下不同的标志位来使一个枚举变量可以记录多个信息。
例如现在有一个定义好的位域枚举:
[Flags] public enum FlagEnum { 我是第一个=1, 我是第二个=2, 我是第三个=4 }
单个枚举的赋值和普通枚举是一样的,直接给就好了:
FlagEnum status = FlagEnum.我是第一个;
再向其中添加其它枚举,则使用按位或运算:
status |= FlagEnum.我是第二个 | FlagEnum.我是第三个;
去除某个枚举值可以使用-=运算:
status -= FlagEnum.我是第三个 | FlagEnum.我是第一个;
判断某个枚举是否在其中可以使用按位与运算:
if ((status & FlagEnum.我是第二个) == FlagEnum.我是第二个) { Console.WriteLine("我是第二个"); } else { Console.WriteLine("没有第二个"); }
在去除枚举值之前保险起见,最好先判断下枚举变量中是否含有要减去的枚举值,万一没有就惨了。。。
FlagEnum remove = FlagEnum.我是第三个 | FlagEnum.我是第一个; if ((status & remove) == remove) status -= remove;
That's all。。。