枚举定义为1,2,4,8.......的值,这样当传入一个3,那么就是表示1,2的组合,如果传入7,那就表示1,2,4的组合,如何用算法实现
List<int> Get(int status)
{
var statusFlags=new List<int>();
for(int i=0;i<(你的枚举项数量);i++)
{
int mask = 1 << i;
if ((status & mask) == mask)
statusFlags.add(mask);
}
return statusFlags;
}
不用实现..net里直接用标识枚举就行.在枚举定义上加[flag]
或者百度搜:.net 标识枚举
用的JAVA
用位运算
这些枚举值的二进制是
1 0x0001
2 0x0010
4 0x0100
8 0x1000
所以1和2的组合就是 1|2=3 0x0011
2和4的组合就是 2|4=6 0x0110
想判断组合值中是否包含某个值,就让这个组合值和期望的值做与操作,得到的结果如果和期望值相同就表示包含:
如判断0x001 中是否有1,就是 3|1=1 0x0001.
总体的思路就是这样,多个枚举值时一样可行。