簡體   English   中英

這兩個枚舉[Flags]聲明(C#)之間有什么區別

[英]What's the difference between these two enum [Flags] declarations (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 ,無法證明)使用一組不同的標志組合)。

如果沒有顯式數字,枚舉每次都會增加1(即使指定了[Flags] ),所以你得到:

[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的連續冪)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM