C# Enum設計和使用的相關技巧

來源:互聯網
上載者:User

C#的Enum設計的相關指導在網上有相關文章論述:

英文:Design Guidelines Update: Enum Design

中文:C# Idioms: Enum還是Enum Class(枚舉類)  

Enum的運算通常涉及到位元運算(AND、OR、XOR),按位元運算, 常使用FlagsAttribute 自訂屬性定義。FlagsAttribute 和 Enum 的準則:

  • 只有要對數值執行按位元運算(AND、OR、XOR)時才對枚舉使用 FlagsAttribute 自訂屬性。

  • 用 2 的冪(即 1、2、4、8 等)定義枚舉常量。這意味著組合的枚舉常量中的各個標誌都不重疊。

  • 請考慮為常用標誌組合建立一個枚舉常量。例如,如果用於檔案 I/O 操作的枚舉包含枚舉常量 Read = 1 和 Write = 2,請考慮建立枚舉常量 ReadWrite = Read OR Write,該常量組合了 Read 和 Write 標誌。此外,在某些情況下,可能會將用於組合標誌的按位 OR 運算視為一種進階概念,在簡單任務中不需要執行此操作。

  • 將負數定義為標誌枚舉常量時應謹慎,因為很多標誌位置都可能設定為 1,這可能使您的代碼產生混淆並易於發生代碼錯誤。

  • 測試數值中是否已設定標誌的一種簡便方法為:在數值和標誌枚舉常量之間執行按位“與”操作,這種方法會將數值中與標誌不對應的所有位都設定為零,然後測試該操作的結果是否等於該標誌枚舉常量。

  • 將 None 用作值為零的標誌枚舉常量的名稱。在按位 AND 運算中,不能使用 None 枚舉常量測試標誌,因為所得的結果始終為零。但是,您可以在數值與 None 枚舉常量之間執行邏輯(不是按位)比較,以確定數值中是否已設定任何位。

  • 如果建立的是值枚舉而不是標誌枚舉,建立 None 枚舉常量仍十分有用。原因是在預設情況下,公用語言運行庫會將用於枚舉的記憶體初始化為零。因此,如果不定義值為零的常量,則枚舉在建立時將包含非法值。

  • 如果明顯存在應用程式需要表示的預設情況,請考慮使用值為零的枚舉常量表示預設值。如果不存在預設情況,請考慮使用值為零的枚舉常量(這意味著該情況不由任何其他枚舉常量表示)。

  • 不要僅為了反映枚舉自身的狀態而定義枚舉值。例如,不要定義僅用於標記枚舉末尾的枚舉常量。如果需要確定枚舉的最後一個值,請顯式檢查該值。此外,如果枚舉常量範圍中的所有值都有效,還可以對第一個和最後一個枚舉常量執行範圍檢查。

  • 不要指定保留供將來使用的枚舉常量。

  • 在定義採用枚舉常量作為值的方法或屬性時,應考慮對該值進行驗證。原因是即使沒有在枚舉中定義某個數值,也可以將該數值強制轉換為枚舉類型。

    

   技巧1:如何去除一個枚舉項:

 例如定義了許可權Enum Permission:

[Flags]

public enum Permission{

      Select = 1,

      Edit = 2,

      Delete = 4,

      View = 8,   

      All = Select | Edit | Delete | View

  } 

可以採用這個函數進行計算:

public static Permission ClearFlag(Permission value, Permission flag)  

{       

    value = value & (Permission.All^ flag);

    return value;

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.