麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

挖一挖C#中那些我們不常用的東西之系列(5)——FlagAttribute

2019-11-14 16:36:35
字體:
供稿:網(wǎng)友

  說到FlagsAttribute,源自前幾天看到了一小段代碼,大概意思就是根據(jù)航班政策來返回哪些配送方式是否可用,根據(jù)這些是否可用

來隱藏或者開啟界面的相關(guān)配送方式,如果大家訂過機(jī)票可能知道配送方式有很多種,比如“無需打印行程單(PJN)”,“機(jī)場自取(Airport)”,

“市內(nèi)配送(CND)”,“快遞(EMS)”等等。

根據(jù)上面的邏輯就可以知道,配送方式是有兩種狀態(tài),可用與不可用,在邏輯實(shí)現(xiàn)上,很容易就想到了bit位,每一個(gè)位代表一個(gè)配送方式,

0表示不可用,1表示可用,所以航班接口只要給一個(gè)數(shù)字就行了,我只需要判斷bit位中哪些是1就行了。

比如用8位byte字段為例:

從圖中可以看到,快遞(EMS)是不可用的,那么怎么判斷呢,其實(shí)也就17&32就ok了,如果為32,則說明可用,為0則不可用,其他

的判斷可以用同樣的手段。

上次看到的代碼邏輯就這樣了,不過畢竟在一個(gè)團(tuán)隊(duì)里面,水平參差不齊,用純數(shù)字來&,|,^,最起碼不是那么容易理解的,如果

配上枚舉的話,可能就更完美了。

    說起枚舉,其實(shí)就是編譯器給我們的語法糖,本質(zhì)上來說就是一個(gè)繼承在Enum類型下的一個(gè)個(gè)const字段,既然是const,那

就天生具備(+,-,* ,/ ^,| &)這樣常規(guī)的數(shù)學(xué)運(yùn)算。

舉個(gè)例子:

 1     [Flags] 2     enum Deliver : byte 3     { 4         CND = 0x01, 5         PJS = 0x02, 6         SND = 0x04, 7         PJN = 0x08, 8         Airport = 0x16, 9         EMS = 0x3210     }

 

然后看看上面的Enum生成的IL代碼。

 

 

可能有人會(huì)問,這里的“uint8” 是怎么回事,其實(shí)這個(gè)就是隱藏到枚舉類型后面的真實(shí)的基元類型,可以用GetUnderlyingType來獲取。

 

通常情況下,枚舉只能顯示一個(gè)狀態(tài),那么如果讓枚舉顯示多個(gè)狀態(tài),這個(gè)時(shí)候就可以用FlagAttribute來標(biāo)記,讓標(biāo)志位來處理枚舉,

來做強(qiáng)大的組合功能。

舉個(gè)例子:從圖中航班政策返回的17的數(shù)字來看,我們知道Airport和CND是可用的,如果用了FlagAttribute標(biāo)記后,這次我們不用擔(dān)

心,直接將17轉(zhuǎn)化為枚舉即可。

從圖中看到,經(jīng)過枚舉轉(zhuǎn)換后,可能對程序員的理解以及記錄log上面,更方便分析和追蹤。

 

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲小视频网站 | 毛片天天看| 日韩视频一区二区三区在线观看 | 亚洲午夜影院在线观看 | 九色国产| 欧美特级一级毛片 | 国产做爰 | av电影网在线观看 | 国产精品久久久久久久娇妻 | 午夜视频久久 | 色a综合 | 一级黄色国产视频 | 国产久草视频在线 | 99国产精品国产免费观看 | 91快色视频 | 精品久久一区二区 | 久草干 | 香蕉久草在线 | 成人一级毛片 | 免费毛片在线视频 | 亚洲精品3 | 欧美日本综合 | 七首小情歌泰剧在线播放 | 国产亚洲精品久久久久久大师 | 成人在线观看小视频 | 亚洲网站一区 | 综合在线视频 | av在线直播观看 | www.91sese | 中文字幕h | 久久久www成人免费精品 | 俄罗斯16一20sex牲色另类 | 久章草在线视频 | 国产日韩精品欧美一区视频 | 亚洲精品久久久久久下一站 | 国产成人自拍av | 毛片免费视频观看 | 日韩视频www | 久久国产成人精品国产成人亚洲 | 色婷婷av一区二区三区久久 | 日本一区二区高清不卡 |