C# 枚举的位运算是比较简单的,但是久了没有写容易忘记。然后网上百度到的靠前的资料又废话比较多,所以干脆自己记录一下。
这里就把各种介绍全部省略了,只做个API介绍。
[System.Flags]
public enum E_LayerType
{
None = 0,
Layer1 = 1 << 1,
Layer2 = 1 << 2,
Layer3 = 1 << 3,
Layer4 = 1 << 4,
Layer5 = 1 << 5,
Layer6 = 1 << 6,
Layer7 = 1 << 7,
Layer8 = 1 << 8,
Layer9 = 1 << 9,
Layer10 = 1 << 10,
}
Layer |= Flag;
示例:
Layer = Layer1,Layer4,Layer5
Flag= Layer2,Layer3,Layer4
运行结果:Layer = Layer1,Layer2,Layer3,Layer4,Layer5
.
Layer &= ~Flag;
示例:
Layer = Layer1,Layer4,Layer5
Flag = Layer2,Layer3,Layer4
运行结果:Layer = Layer1,Layer5
下面2个方法等价。
bool ret = Layer.HasFlag(Flag);
bool ret = (Layer & Flag) == Flag;
Layer = Layer1,Layer4,Layer5
Flag = Layer2,Layer3,Layer4 : Flase
Flag = Layer4 : True
Flag = Layer4,Layer5 : True
还有一种需求,就是查询 Layer 中是否包含 Flag 中的任意一个:
bool ret = (Layer & Flag) != E_LayerType.None;
Layer = Layer1,Layer4,Layer5
Flag = Layer2,Layer3,Layer4 : true
Flag = Layer2,Layer3: false
Flag = Layer4 : True
Layer = E_LayerType.Layer2;
Layer = E_LayerType.Layer2 | E_LayerType.Layer9 | E_LayerType.Layer4;