Roy*_*Lee 4 c# enums flags bit-manipulation
在学习这项flag技术的同时,我遇到了一些问题,特此我用C#和Enum展示了这个例子:
[Flags]
enum PermissionTypes : byte
{
None = 0x0,
Read = 0x1,
Write = 0x2,
Modify = 0x4,
Delete = 0x8,
Create = 0x10,
All = Read | Write | Modify | Delete | Create
}
Run Code Online (Sandbox Code Playgroud)
要检查hasFlag属性:
if((value & mask) == mask) {...}
Run Code Online (Sandbox Code Playgroud)
但是当'hasFlag'应用于'None'和'Read'时:
Denote x = Current_Permission_Setting,
x & PermissionTypes.None = always false
x & PermissionTypes.Read = always true IFF
Run Code Online (Sandbox Code Playgroud)
(续)IFF x = { ODD字节值}
问题:可以安全使用的完美标志值是什么?
参考: 这是完整的例子.
正如@antlersoft在评论中所说,你不能真正使用它NONE作为一个位标志.
其余的旗帜是有道理的.您需要使用2的幂来获得每个标志1位.
无论如何,测试"Has READ and NONE"设置是没有意义的,因为NONE意味着没有设置READ.
你用奇数值X描述的问题似乎没有意义.如果设置了位1,则该值仅为奇数.如果您始终使用标志,则只有READ为真时才会设置位1.