我们有一个数据库,其中的一列包含复合枚举整数值。我们需要剥离特定枚举整数值的所有这些值(如果有),但其余部分保留在原处。
[Flags]
public enum MyEnum
{
Enum1 = 1,
Enum2 = 2,
Enum3 = 4,
Enum4 = 8,
}
在数据库中,我们发现
Row MyEnumSettings
1 3 (Enum1 | Enum2)
2 8 (Enum4)
3 6 (Enum2 | Enum3)
4 14 (Enum2 | Enum3 | Enum4)
我们要从每一行中删除Enum3并最终得到
Row MyEnumSettings
1 3 (no change)
2 8 (no chnage)
3 2 (removed Enum3)
4 10 (removed Enum3)
我们可以使用Enum.IsDefined来检查整数是否是枚举的一部分(不确定它是否适用于复合整数值。)。但是,我们如何检查给定的整数值是否包含枚举的特定部分?
最佳答案
如果按位添加枚举,则应删除该枚举:
Value &= ~Enum3
基本上,您需要按位取反导致负掩码的Enum3,并按位与以排除为0的位。
相反的操作是,如果需要将其添加回去
Value |= Enum3