如何确定哪些枚举项在整数值中"隐藏"

Jus*_*der 1 c# enums

我们有一个数据库,其中一列包含复合枚举整数值.我们需要删除特定枚举整数值的所有这些值(如果有的话),但保留其余值.

[Flags]
public enum MyEnum
{
    Enum1 = 1,
    Enum2 = 2,
    Enum3 = 4,
    Enum4 = 8,
}
Run Code Online (Sandbox Code Playgroud)

在我们找到的数据库中

Row    MyEnumSettings
1      3                   (Enum1 | Enum2)
2      8                   (Enum4)
3      6                   (Enum2 | Enum3)
4      14                  (Enum2 | Enum3 | Enum4)
Run Code Online (Sandbox Code Playgroud)

我们想要从每一行中删除Enum3并最终结束

Row    MyEnumSettings
1      3                   (no change)
2      8                   (no chnage)
3      2                   (removed Enum3)
4      10                  (removed Enum3)
Run Code Online (Sandbox Code Playgroud)

我们可以使用Enum.IsDefined来检查整数是否是枚举的一部分(不确定它是否适用于复合整数值..).但是,我们如何检查给定的整数值是否包含枚举的特定部分?

Mat*_*tzi 7

如果按位添加枚举,则应删除枚举:

Value &= ~Enum3 
Run Code Online (Sandbox Code Playgroud)

基本上你需要按位否定导致负掩码的Enum3,并按位AND应用以排除0的位.

相反的操作是,如果您需要将其添加回来

Value |= Enum3
Run Code Online (Sandbox Code Playgroud)