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

首頁(yè) > 開(kāi)發(fā) > 綜合 > 正文

C# Enum設(shè)計(jì)和使用的相關(guān)技巧

2024-07-21 02:28:28
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

enum的運(yùn)算通常涉及到位運(yùn)算(and、or、xor),按位運(yùn)算, 常使用flagsattribute 自定義屬性定義。flagsattribute 和 enum 的準(zhǔn)則:
只有要對(duì)數(shù)值執(zhí)行按位運(yùn)算(and、or、xor)時(shí)才對(duì)枚舉使用 flagsattribute 自定義屬性。
用 2 的冪(即 1、2、4、8 等)定義枚舉常量。這意味著組合的枚舉常量中的各個(gè)標(biāo)志都不重疊。
請(qǐng)考慮為常用標(biāo)志組合創(chuàng)建一個(gè)枚舉常量。例如,如果用于文件 i/o 操作的枚舉包含枚舉常量 read = 1 和 write = 2,請(qǐng)考慮創(chuàng)建枚舉常量 readwrite = read or write,該常量組合了 read 和 write 標(biāo)志。此外,在某些情況下,可能會(huì)將用于組合標(biāo)志的按位 or 運(yùn)算視為一種高級(jí)概念,在簡(jiǎn)單任務(wù)中不需要執(zhí)行此操作。
將負(fù)數(shù)定義為標(biāo)志枚舉常量時(shí)應(yīng)謹(jǐn)慎,因?yàn)楹芏鄻?biāo)志位置都可能設(shè)置為 1,這可能使您的代碼產(chǎn)生混淆并易于發(fā)生代碼錯(cuò)誤。
測(cè)試數(shù)值中是否已設(shè)置標(biāo)志的一種簡(jiǎn)便方法為:在數(shù)值和標(biāo)志枚舉常量之間執(zhí)行按位“與”操作,這種方法會(huì)將數(shù)值中與標(biāo)志不對(duì)應(yīng)的所有位都設(shè)置為零,然后測(cè)試該操作的結(jié)果是否等于該標(biāo)志枚舉常量。
將 none 用作值為零的標(biāo)志枚舉常量的名稱(chēng)。在按位 and 運(yùn)算中,不能使用 none 枚舉常量測(cè)試標(biāo)志,因?yàn)樗玫慕Y(jié)果始終為零。但是,您可以在數(shù)值與 none 枚舉常量之間執(zhí)行邏輯(不是按位)比較,以確定數(shù)值中是否已設(shè)置任何位。
如果創(chuàng)建的是值枚舉而不是標(biāo)志枚舉,創(chuàng)建 none 枚舉常量仍十分有用。原因是在默認(rèn)情況下,公共語(yǔ)言運(yùn)行庫(kù)會(huì)將用于枚舉的內(nèi)存初始化為零。因此,如果不定義值為零的常量,則枚舉在創(chuàng)建時(shí)將包含非法值。
如果明顯存在應(yīng)用程序需要表示的默認(rèn)情況,請(qǐng)考慮使用值為零的枚舉常量表示默認(rèn)值。如果不存在默認(rèn)情況,請(qǐng)考慮使用值為零的枚舉常量(這意味著該情況不由任何其他枚舉常量表示)。
不要僅為了反映枚舉自身的狀態(tài)而定義枚舉值。例如,不要定義僅用于標(biāo)記枚舉末尾的枚舉常量。如果需要確定枚舉的最后一個(gè)值,請(qǐng)顯式檢查該值。此外,如果枚舉常量范圍中的所有值都有效,還可以對(duì)第一個(gè)和最后一個(gè)枚舉常量執(zhí)行范圍檢查。
不要指定保留供將來(lái)使用的枚舉常量。
在定義采用枚舉常量作為值的方法或?qū)傩詴r(shí),應(yīng)考慮對(duì)該值進(jìn)行驗(yàn)證。原因是即使沒(méi)有在枚舉中定義某個(gè)數(shù)值,也可以將該數(shù)值強(qiáng)制轉(zhuǎn)換為枚舉類(lèi)型。
    

   技巧1:如何去除一個(gè)枚舉項(xiàng):

 例如定義了權(quán)限enum permission:

[flags]

public enum permission{

      select = 1,

      edit = 2,

      delete = 4,

      view = 8,   

      all = select | edit | delete | view

  } 

可以采用這個(gè)函數(shù)進(jìn)行計(jì)算:

public static permission clearflag(permission value, permission flag) 

{       

    value = value & (permission.all^ flag);

    return value;

}

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 遂川县| 澎湖县| 榆社县| 封开县| 景东| 阳高县| 扶绥县| 贡嘎县| 资阳市| 杭锦旗| 揭阳市| 通辽市| 会宁县| 卫辉市| 乳山市| 阳新县| 北票市| 徐水县| 师宗县| 长垣县| 民和| 临泽县| 靖江市| 浦东新区| 十堰市| 德江县| 馆陶县| 彭阳县| 桐乡市| 南通市| 台前县| 福鼎市| 余干县| 丹江口市| 东安县| 樟树市| 衡阳县| 三原县| 吴江市| 白城市| 神木县|