2012-10-11 40 views
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檢查一個整數一部分的枚舉(不知道它是否適用於複合整數值..)。但是,我們如何檢查給定的整數值是否包含枚舉的特定部分?

回答

7

這應該刪除如果bitwisely加入他們的枚舉:

Value &= ~Enum3 

基本上你需要bitwisely否定導致負面具Enum3,並申請按位與排除位,該位爲0

相反的操作是,如果你需要重新添加

Value |= Enum3 
+0

大,會(現在沒時間 - 但明天)嘗試。 – JustAnotherCoder

+0

要檢查複合值,請在枚舉中的每個項目上使用value.HasFlag(MyEnum.Enum1)來獲取整個圖片。 – JustAnotherCoder