C# 如何确定哪些枚举项是;“隐藏的”;以整数值表示

C# 如何确定哪些枚举项是;“隐藏的”;以整数值表示,c#,enums,C#,Enums,我们有一个数据库,其中一列包含复合枚举整数值。我们需要从一个特定的枚举整数值中去掉所有这些值(如果有的话),但保留其余的值 [Flags] public enum MyEnum { Enum1 = 1, Enum2 = 2, Enum3 = 4, Enum4 = 8, } 在我们找到的数据库中 Row MyEnumSettings 1 3 (Enum1 | Enum2) 2 8

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

[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

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

Value &= ~Enum3 
基本上,您需要按位对Enum3求反,这将导致负掩码,然后按位应用并排除0位

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

Value |= Enum3

很好,我将尝试(现在没有时间,明天就可以了)。要检查复合值,请在枚举中的每个项目上使用value.HasFlag(MyEnum.Enum1)以获得全局。很好,我将尝试(现在没有时间,明天就可以了)。要检查复合值,请在枚举中的每个项目上使用value.HasFlag(MyEnum.Enum1)以获得全局。