1

列の1つに複合列挙整数値が含まれるデータベースがあります。特定の列挙整数値のこれらすべての値 (ある場合) を削除する必要がありますが、残りはそのままにしておきます。

[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 を使用して、整数が列挙型の一部であるかどうかを確認できます (複合整数値で機能するかどうかはわかりません..)。しかし、指定された整数値に列挙型の特定の部分が含まれているかどうかを確認するにはどうすればよいでしょうか?

4

1 に答える 1

7

列挙型がビットごとに追加されている場合、これは列挙型を削除する必要があります。

Value &= ~Enum3 

基本的に、負のマスクにつながる Enum3 をビットごとに否定し、ビットごとの AND を適用して 0 のビットを除外する必要があります。

逆の操作は、元に戻す必要がある場合です

Value |= Enum3
于 2012-10-11T13:58:27.770 に答える