2011-02-11 101 views
8

我發現有或無標誌的屬性,我可以做,如果我定義了以下枚舉是否必須使用flags屬性?

enum TestType 
{ 
    None = 0x0, 
    Type1 = 0x1, 
    Type2 = 0x2 
} 

我想知道爲什麼我們需要的屬性標誌位操作?

+0

[枚舉標誌屬性](http://stackoverflow.com/questions/8447/enum-flags-attribute)可能的重複 – BoltClock 2011-02-11 10:28:50

+1

其實,我不認爲這是一個騙局;那dup沒有*觸摸*爲什麼需要;在那裏的所有例子都會以相同的方式工作 – 2011-02-11 10:29:58

回答

14

C#將把它們同任何一種方式,但C#是不是唯一的消費者:

  • PropertyGrid將呈現不同的看法,讓組合
  • XmlSerializer將接受/拒絕在此基礎上標誌分隔組合
  • Enum.Parse同樣(從字符串),並枚舉的.ToString()將表現不同
  • 大量的顯示或處理該值將把它們不同的其他代碼當然

更重要的是,它是其他開發人員(和代碼)的意圖表達; 這意味着被視爲組合,而非排他性值

1

有時enum值的位組合有意義(如FileAccess-讀,寫,讀+寫),有時它們不是(通常)。所以[Flags]是描述性的方式來存儲元數據信息位操作是有意義的對這個枚舉類型。這個屬性有幾個消費者,例如那個枚舉的ToString

相關問題