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

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

c#中利用“|”運算組合多項

2019-11-17 03:24:04
字體:
供稿:網(wǎng)友
c#中利用“|”運算組合多項

  前幾天看到一段代碼

int i = GetCount(para1 | para2);

  咋一看有些莫名奇妙,怎么傳參的時候帶了個或運算,其實這里面是有講究的,查閱了各方資料,QQ群里賴著大牛問,才搞明白。這個運算可以用來進行多項組合。

舉個例子,在設計權(quán)限的時候,你肯定會這樣設計,權(quán)限A,做什么,權(quán)限B,做什么,權(quán)限C,做什么...如此定義權(quán)限,在調(diào)用處理函數(shù)時,我們直接傳對應的權(quán)限Id就行,假設用戶甲有A權(quán)限,我很明確得傳權(quán)限A的Id,用戶乙有B權(quán)限,我傳B權(quán)限的Id,這樣看來似乎是合理的。但是,如果用戶丙同時有A權(quán)限和B權(quán)限怎么辦呢,你可能會說,那我定義權(quán)限的時候定個AB’的權(quán)限好了,這樣凡是同時有A和B權(quán)限的用戶傳AB’的Id就行了,我一開始也是這么想的,不過,這個做法是不推薦的,也是不巧妙的,假如還有用戶同時有ABC權(quán)限,或者BC權(quán)限,或者CD權(quán)限,那么我就什么事也不用干了,就一直在給它定義類型了。

推薦的做法是,傳參用“|”運算組合,處理用“&”運算拆分,這樣,調(diào)用者可以隨意組合,而對于處理者,則只定義最基本的單個處理“&”判斷即可。看個例子:

定義一個枚舉表示權(quán)限類型:

public enum PRivilege{        Read = 0x01,        Write = 0x02,        Add = 0x04,        Delete = 0x08,}
定義一個處理函數(shù):
public void GetPrivilege(Privilege pri){        if ((pri & Privilege.Read) == Privilege.Read)        {            //do something        }        if ((pri & Privilege.Write) == Privilege.Write)        {            //do something        }        if ((pri & Privilege.Add) == Privilege.Add)        {            //do something        }        if ((pri & Privilege.Delete) == Privilege.Delete)        {            //do something        }}
然后在其他地方調(diào)用:
...    GetPrivilege(Privilege.Read);    GetPrivilege(Privilege.Write);    GetPrivilege(Privilege.Add);    GetPrivilege(Privilege.Delete);    GetPrivilege(Privilege.Read | Privilege.Write);    GetPrivilege(Privilege.Write | Privilege.Add);    GetPrivilege(Privilege.Read | Privilege.Write | Privilege.Add);...
你會看到每次調(diào)用都會精準得執(zhí)行。為什么可以這樣呢,看我定義的枚舉,對應的值分別是
0x010x020x040x08

  為什么我不定義成0x01,0x02,0x03,0x04,這是就依賴于我一開始講的“|”和“&”運算了,“|”或運算是只要有1方為1就為1,“&”與運算是兩者都為1才為1,把0x01,0x02,0x04,0x08轉(zhuǎn)成2進制就是

0001001001001000

  任何兩個組合,都會在自己的位上變?yōu)?。之后再拆分,由于之前組合過,自然就能精準地定位了。比如0x1和0x8組合,組合后就是1001,那么之后通過“&”來拆分,當&0x1時就能進去,&到0x8時也能進去,像這種0x01,0x02,0x04,0x08用行話講叫“開關(guān)位”,今天在QQ群里問人被人說,哎~丟銀啊~

如此,便能以不變應萬變,組合出任意結(jié)果,真是很方便啊。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 临汾市| 金坛市| 隆德县| 老河口市| 辉县市| 巴东县| 满洲里市| 中西区| 武威市| 开江县| 靖江市| 高要市| 晋城| 凤山市| 朔州市| 静乐县| 六安市| 武陟县| 三门峡市| 岳普湖县| 嘉义县| 宜君县| 普格县| 连平县| 莆田市| 万荣县| 宜昌市| 永昌县| 平安县| 宜丰县| 和政县| 洞口县| 布拖县| 莎车县| 安平县| 和林格尔县| 台东市| 湖南省| 河北区| 湘潭市| 富川|