枚举类型合并分解
枚举类型的成员可以合并
为了避免混淆,合并枚举类型的成员需要显示指定值,典型的值为2的次幂
[Flags]
public enum BorderSides{
None=0,
Left=1,
Right=2,
Top=4,
Bottom=8
}
使用位运算符合并枚举类型的值
|,&,^
这些符号将作用在对应的整数数值上
BorderSides leftRight = BorderSides.Right | BorderSides.Left;
if( (leftRight & BorderSides.Left) != 0){
Console.WriteLine("Include Left");
}
string formatted= leftRight.ToString() //"Left , Right"
BorderSides s =BoderSides.Left;
s |= BorderSides.Right;
Console.Write(s == leftRight); //true
s^=BorderSides.Right
Console.Write(s); //Left
按照惯例,当枚举类型的成员可以合并时,其枚举类型一定要应用Flags特性。
如果声明了一个没有应用Flags特性的枚举类型,其成员依然可以合并,但若在该枚举实例上调用ToString()方法,则会输出一个数值而非一组名字
为了方便起见,可以将合并的成员直接放在枚举的声明内:
[Flags]
public enum BorderSides{
None=0,
Left=1,
Right=2,
Top=4,
Bottom=8,
LeftRight=Left|Right,
Top Bottom=Top|Bottom,
All=LeftRight|TopBottom
}