使用C#中的Flags特性
舉個(gè)例子:我有如下的一個(gè)需求,當(dāng)我想要取得用戶信息的時(shí)候,會(huì)先從本地緩存中查找,找不到然后從分布式緩存中查找,最后找不到再?gòu)臄?shù)據(jù)庫(kù)中查詢。但是有些場(chǎng)景我又不需要查詢數(shù)據(jù)庫(kù)。
所以我想建立如下這種模型。
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)建一個(gè)List,比較麻煩,此時(shí)我們可以使用枚舉中的Flags特性,修改程序如下:
首先是枚舉的定義上,要加上 [Flags] 特性標(biāo)簽,并且定義 一般都是 2的n次方,主要是便于位移運(yùn)算
/// <summary>
/// 數(shù)據(jù)取得地方
/// </summary>
[Flags]
public enum DataSource
{
/// <summary>
/// 本地緩存
/// </summary>
[Description("本地緩存")]
LocalCache = 1,
/// <summary>
/// 分布式緩存
/// </summary>
[Description("分布式緩存")]
DistributeCache = 2,
/// <summary>
/// 數(shù)據(jù)庫(kù)
/// </summary>
[Description("數(shù)據(jù)庫(kù)")]
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)用的地方,可以通過(guò)“|”來(lái)指定,例如我只想用分布式緩存和數(shù)據(jù)庫(kù),那么:
var userInfo = GetUserInfo(DataSource.Distribution | DataSource.DB);
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#使用async和await實(shí)現(xiàn)異步編程
本文詳細(xì)講解了C#使用async和await實(shí)現(xiàn)異步編程的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
C#中計(jì)時(shí)器的簡(jiǎn)單實(shí)現(xiàn)方法示例
這篇文章主要介紹了C#中計(jì)時(shí)器的簡(jiǎn)單實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了C#計(jì)時(shí)器的簡(jiǎn)單定義與使用技巧,需要的朋友可以參考下2017-05-05
Winform實(shí)現(xiàn)抓取web頁(yè)面內(nèi)容的方法
這篇文章主要介紹了Winform實(shí)現(xiàn)抓取web頁(yè)面內(nèi)容的方法,代碼只有短短幾行,但是功能很實(shí)用,需要的朋友可以參考下2014-09-09
c# 獲取數(shù)據(jù)庫(kù)中所有表名稱(chēng)的方法
在很多情況下我們需要將指定的數(shù)據(jù)庫(kù)中的所有表都列出來(lái)。在使用c#進(jìn)行軟件開(kāi)發(fā)時(shí),我們有哪些方法可是實(shí)現(xiàn)這個(gè)目的呢?本人對(duì)此進(jìn)行概要的總結(jié),有以下6中方式可以實(shí)現(xiàn)這個(gè)目的。2010-02-02

