日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

使用C#中的Flags特性_C#教程

作者:奮斗的大橙子 ? 更新時間: 2022-08-29 編程語言

舉個例子:我有如下的一個需求,當我想要取得用戶信息的時候,會先從本地緩存中查找,找不到然后從分布式緩存中查找,最后找不到再從數據庫中查詢。但是有些場景我又不需要查詢數據庫。

所以我想建立如下這種模型。

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

原文鏈接:https://www.cnblogs.com/dcz2015/p/10943759.html

欄目分類
最近更新