2011-05-22 45 views
3

這是更多的問題,我要求瞭解而不是找出問題。考慮以下兩種:這兩個枚舉[標誌]聲明(C#)之間的區別是什麼

[Flags] 
    public enum Flags 
    { 
     NONE = 0x0, 
     PASSUPDATE = 0x1, 
     PASSRENDER = 0x2, 
     DELETE = 0x4, 
     ACCEPTINPUT = 0x8, 
     FADE_IN = 0x10, 
     FADE_OUT = 0x20, 
     FADE_OUT_COMPLETE = 0x40 
    } 

[Flags] 
    public enum Flags 
    { 
     NONE = 0x0, 
     PASSUPDATE, 
     PASSRENDER, 
     DELETE, 
     ACCEPTINPUT, 
     FADE_IN , 
     FADE_OUT, 
     FADE_OUT_COMPLETE 
    } 

如果我使用後者枚舉類型的東西有點檢查有時是重疊的(我認爲像DELETE被解釋爲PASSUPDATE | PASSRENDER,而在第一個例子中的每個條目是獨立於其他的(即DELETE只有DELETE,不能使用一組不同的標誌的組合被證明)

+0

顯示代碼,其中刪除被評估爲兩個Pass? – 2011-05-22 13:57:15

+2

'[Flags]'屬性不會神奇地將枚舉轉換爲二進制枚舉。 – BoltClock 2011-05-22 13:58:36

+2

你應該重新思考這個枚舉代表什麼。顯然,它開始代表一個狀態,淡入,淡出和淡入完成同時處於活動狀態沒有什麼意義。小心避免添加真正應該是單獨屬性的枚舉成員。現在刪除[標誌],問題解決了。 – 2011-05-22 15:36:13

回答

12

沒有明確的數字,每一次(指定即使[Flags])枚舉遞增1,這樣就可以獲得:

[Flags] 
public enum Flags 
{ 
    NONE = 0x0, 
    PASSUPDATE, // = 1 
    PASSRENDER,// = 2 
    DELETE,// = 3 
    ACCEPTINPUT,// = 4 
    FADE_IN ,// = 5 
    FADE_OUT,// = 6 
    FADE_OUT_COMPLETE// = 7 
} 

這是根本不是你想要的數字(當然不是通常是連續冪2的按位標記)

+0

感謝您的解釋! – tweetypi 2011-05-22 23:36:10