国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

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

2019-11-18 16:52:51
字體:
來源:轉載
供稿:網(wǎng)友

Enum的運算通常涉及到位運算(AND、OR、XOR),按位運算, 常使用FlagsAttribute 自定義屬性定義。FlagsAttribute 和 Enum 的準則:
只有要對數(shù)值執(zhí)行按位運算(AND、OR、XOR)時才對枚舉使用 FlagsAttribute 自定義屬性。
用 2 的冪(即 1、2、4、8 等)定義枚舉常量。這意味著組合的枚舉常量中的各個標志都不重疊。
請考慮為常用標志組合創(chuàng)建一個枚舉常量。例如,如果用于文件 I/O 操作的枚舉包含枚舉常量 Read = 1 和 Write = 2,請考慮創(chuàng)建枚舉常量 ReadWrite = Read OR Write,該常量組合了 Read 和 Write 標志。此外,在某些情況下,可能會將用于組合標志的按位 OR 運算視為一種高級概念,在簡單任務中不需要執(zhí)行此操作。
將負數(shù)定義為標志枚舉常量時應謹慎,因為很多標志位置都可能設置為 1,這可能使您的代碼產(chǎn)生混淆并易于發(fā)生代碼錯誤。
測試數(shù)值中是否已設置標志的一種簡便方法為:在數(shù)值和標志枚舉常量之間執(zhí)行按位“與”操作,這種方法會將數(shù)值中與標志不對應的所有位都設置為零,然后測試該操作的結果是否等于該標志枚舉常量。
將 None 用作值為零的標志枚舉常量的名稱。在按位 AND 運算中,不能使用 None 枚舉常量測試標志,因為所得的結果始終為零。但是,您可以在數(shù)值與 None 枚舉常量之間執(zhí)行邏輯(不是按位)比較,以確定數(shù)值中是否已設置任何位。
如果創(chuàng)建的是值枚舉而不是標志枚舉,創(chuàng)建 None 枚舉常量仍十分有用。原因是在默認情況下,公共語言運行庫會將用于枚舉的內(nèi)存初始化為零。因此,如果不定義值為零的常量,則枚舉在創(chuàng)建時將包含非法值。
如果明顯存在應用程序需要表示的默認情況,請考慮使用值為零的枚舉常量表示默認值。如果不存在默認情況,請考慮使用值為零的枚舉常量(這意味著該情況不由任何其他枚舉常量表示)。
不要僅為了反映枚舉自身的狀態(tài)而定義枚舉值。例如,不要定義僅用于標記枚舉末尾的枚舉常量。如果需要確定枚舉的最后一個值,請顯式檢查該值。此外,如果枚舉常量范圍中的所有值都有效,還可以對第一個和最后一個枚舉常量執(zhí)行范圍檢查。
不要指定保留供將來使用的枚舉常量。
在定義采用枚舉常量作為值的方法或屬性時,應考慮對該值進行驗證。原因是即使沒有在枚舉中定義某個數(shù)值,也可以將該數(shù)值強制轉換為枚舉類型。
    

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

 例如定義了權限Enum Permission:

[Flags]

public enum Permission{

      Select = 1,

      Edit = 2,

      Delete = 4,

      View = 8,   

      All = Select | Edit | Delete | View

  } 

可以采用這個函數(shù)進行計算:

public static Permission ClearFlag(Permission value, Permission flag) 

{       

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

    return value;

}

http://www.survivalescaperooms.com/shanyou/archive/2006/11/16/562816.html


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 阳朔县| 大英县| 舒兰市| 锡林郭勒盟| 台安县| 彰武县| 富宁县| 和龙市| 吕梁市| 龙里县| 承德市| 衢州市| 随州市| 太湖县| 临汾市| 衡东县| 青龙| 阿鲁科尔沁旗| 黔西县| 儋州市| 烟台市| 定西市| 齐河县| 庆阳市| 霍城县| 临邑县| 都昌县| 新兴县| 米林县| 永寿县| 抚宁县| 田林县| 宜阳县| 安新县| 桃源县| 富宁县| 穆棱市| 二连浩特市| 西吉县| 仙游县| 叶城县|