使用C#中的Flags特性
舉個例子:我有如下的一個需求,當我想要取得用戶信息的時候,會先從本地緩存中查找,找不到然后從分布式緩存中查找,最后找不到再從數(shù)據(jù)庫中查詢。但是有些場景我又不需要查詢數(shù)據(jù)庫。
所以我想建立如下這種模型。
public UserEntity GetUserInfo(List<DataSource> dataSources) { var xxxx = new UserEntity(); if(dataSources.Any(DataSource.Local) { //從本地緩存中獲取 return xxxx; } if(dataSources.Any(DataSource.Distribution) { //從分布式緩存中獲取 //更新本地緩存 return xxxx; } if(dataSources.Any(DataSource.DB) { //從DB中獲取 //更新分布式緩存 //更新本地緩存 } return xxxx; }
但是每次調(diào)用者都去構(gòu)建一個List,比較麻煩,此時我們可以使用枚舉中的Flags特性,修改程序如下:
首先是枚舉的定義上,要加上 [Flags] 特性標簽,并且定義 一般都是 2的n次方,主要是便于位移運算
/// <summary> /// 數(shù)據(jù)取得地方 /// </summary> [Flags] public enum DataSource { /// <summary> /// 本地緩存 /// </summary> [Description("本地緩存")] LocalCache = 1, /// <summary> /// 分布式緩存 /// </summary> [Description("分布式緩存")] DistributeCache = 2, /// <summary> /// 數(shù)據(jù)庫 /// </summary> [Description("數(shù)據(jù)庫")] DB = 4, }
修改代碼:
public UserEntity GetUserInfo(DataSource dataSources) { var xxxx = new UserEntity(); if(dataSources.HasFlags(DataSource.Local) { //從本地緩存中獲取 return xxxx; } if(dataSources.HasFlags(DataSource.Distribution) { //從分布式緩存中獲取 //更新本地緩存 return xxxx; } if(dataSources.HasFlags(DataSource.DB) { //從DB中獲取 //更新分布式緩存 //更新本地緩存 } return xxxx; }
調(diào)用的地方,可以通過“|”來指定,例如我只想用分布式緩存和數(shù)據(jù)庫,那么:
var userInfo = GetUserInfo(DataSource.Distribution | DataSource.DB);
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Winform實現(xiàn)抓取web頁面內(nèi)容的方法
這篇文章主要介紹了Winform實現(xiàn)抓取web頁面內(nèi)容的方法,代碼只有短短幾行,但是功能很實用,需要的朋友可以參考下2014-09-09