使用C#中的Flags特性
舉個例子:我有如下的一個需求,當(dāng)我想要取得用戶信息的時候,會先從本地緩存中查找,找不到然后從分布式緩存中查找,最后找不到再從數(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] 特性標(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ù)庫
/// </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)文章
C#使用DateAndTime.DateDiff實現(xiàn)計算年齡
這篇文章主要為大家詳細(xì)介紹了C#如何使用DateAndTime.DateDiff實現(xiàn)根據(jù)生日計算年齡,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2024-01-01
C#多線程學(xué)習(xí)之(一)多線程的相關(guān)概念分析
這篇文章主要介紹了C#多線程學(xué)習(xí)之多線程的相關(guān)概念,涉及C#中多線程的相關(guān)概念與使用技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04
Winform消除button按下出現(xiàn)的虛線簡單實現(xiàn)方法
這篇文章主要介紹了Winform消除button按下出現(xiàn)的虛線簡單實現(xiàn)方法,通過重寫button設(shè)置Selectable參數(shù)實現(xiàn)該功能,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08
C#十六進(jìn)制字符串轉(zhuǎn)十進(jìn)制int的方法
這篇文章主要介紹了C#十六進(jìn)制字符串轉(zhuǎn)十進(jìn)制int的方法,涉及C#操作數(shù)制轉(zhuǎn)換的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03
詳解三種C#實現(xiàn)數(shù)組反轉(zhuǎn)方式
本篇文章主要介紹了詳解三種C#實現(xiàn)數(shù)組反轉(zhuǎn)方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04

