使用C#中的Flags特性

作者:奋斗的大橙子 时间:2023-09-15 22:21:22 

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

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

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

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

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

来源:https://www.cnblogs.com/dcz2015/p/10943759.html

标签:C#,Flags,特性
0
投稿

猜你喜欢

  • Java之策略模式比较器案例讲解

    2021-12-25 22:24:32
  • 史上最简洁C# 生成条形码图片思路及示例分享

    2023-08-24 15:50:25
  • Android AMS启动详解

    2023-08-26 16:13:52
  • SpringMVC中的handlerMappings对象用法

    2023-01-09 21:38:36
  • 关于c#中单例模式的一些问题

    2022-01-21 08:56:18
  • JAVA实现的简单万年历代码

    2021-10-02 21:35:34
  • 关于WPF异步MVVM等待窗体的介绍

    2022-08-03 00:54:19
  • C#如何访问共享文件夹或者磁盘

    2023-11-08 09:43:44
  • java 获取字节码文件的几种方法总结

    2023-11-29 15:17:57
  • 详解json string转换为java bean及实例代码

    2021-07-04 01:48:26
  • C#实现中英文混合字符串截取的方法

    2022-07-11 10:02:35
  • 解决Callable的对象中,用@Autowired注入别的对象失败问题

    2023-11-29 13:23:46
  • Android自定义View绘图实现拖影动画

    2023-04-16 00:06:38
  • Flutter web bridge 通信总结分析详解

    2022-05-23 05:15:42
  • C#实现组合排列的方法

    2021-10-04 02:25:01
  • Android加载loading对话框的功能及实例代码(不退出沉浸式效果)

    2023-05-14 01:25:33
  • Java实现上传文件图片到指定服务器目录

    2023-06-28 00:23:32
  • Java获取任意http网页源代码的方法

    2022-07-06 01:45:37
  • Http学习之组装报文

    2021-12-30 07:23:18
  • C#基础:Dispose()、Close()、Finalize()的区别详解

    2021-10-22 19:20:23
  • asp之家 软件编程 m.aspxhome.com