使用C#中的Flags特性

使用C#中的Flags特性

举个例子:我有如下的一个需求,当我想要取得用户信息的时候,会先从本地缓存中查找,找不到然后从分布式缓存中查找,最后找不到再从数据库中查询。但是有些场景我又不需要查询数据库。

所以我想建立如下这种模型。

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; }

但是每次调用者都去构建一个List,比较麻烦,此时我们可以使用枚举中的Flags特性,修改程序如下:

首先是枚举的定义上,要加上   [Flags] 特性标签,并且定义 一般都是 2的n次方,主要是便于位移运算

/// <summary> /// 数据取得地方 /// </summary> [Flags] public enum DataSource { /// <summary> /// 本地缓存 /// </summary> [Description("本地缓存")] LocalCache = 1, /// <summary> /// 分布式缓存 /// </summary> [Description("分布式缓存")] DistributeCache = 2, /// <summary> /// 数据库 /// </summary> [Description("数据库")] 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; }

调用的地方,可以通过“|”来指定,例如我只想用分布式缓存和数据库,那么:

var userInfo = GetUserInfo(DataSource.Distribution | DataSource.DB);

推荐阅读

    678元的索泰zt-h55d3-m1dh主板

    678元的索泰zt-h55d3-m1dh主板,,近日,索泰zt-h55d3-m1dh主板已经运到市场,这是基于英特尔H55芯片组。它支持LGA 1156接口的酷睿i系列处理器

    学习写字楼新选择6000元主流配置

    学习写字楼新选择6000元主流配置,,这种配置需要考虑双核心的办公和娱乐平台,充分考虑办公室的办公需求和娱乐需求,以约6000元的预算和cost-e

    金蝶专业版审核以前期间的单据

    金蝶专业版审核以前期间的单据,,1.之前会计是手工做账,现在是金蝶做账,需要什么资料入初始数据在金碟里把你手工帐的科目设置好,然后启用帐

    excel怎么用乘法函数

    excel怎么用乘法函数,乘法,函数,哪个,excel乘法函数怎么用?1、首先用鼠标选中要计算的单元格。2、然后选中单元格后点击左上方工具栏的fx公

    金蝶担保机构业务管理系统

    金蝶担保机构业务管理系统,,1.金蝶财务软件怎么使用?软件使用方法 使用需要先登陆到数据库,可只导出V3数据或只导出最新年度数据。功能介绍

    wps如何合并章节

    wps如何合并章节,WPS教程,1.WPS表格如何实现单元格合并?WPS 表格在新版本中增加了“合并单元格”系列按钮,同时配有下拉菜单和快捷键。新增