当前位置: 首页 > news >正文

ConcurrentDictionaryTKey, TValue的AddOrUpdate方法

https://msdn.microsoft.com/zh-cn/library/ee378665(v=vs.110).aspx

此方法有一共有2个,现在只讨论其中一个

public TValue AddOrUpdate(
TKey key,
TValue addValue,
Func<TKey, TValue, TValue> updateValueFactory
)

 

Parameters 参数说明

key 参数名称    【此参数不允许为null】
Type: TKey 参数类型
The key to be added or whose value should be updated 需要添加或者更新的key


addValue 参数名称
Type: TValue 参数类型
The value to be added for an absent key 和新key匹配的value


updateValueFactory 参数名称    【此参数不允许为null】
Type: System.Func<TKey, TValue, TValue> 参数类型
The function used to generate a new value for an existing key based on the key's existing value 此函数用来基于已有的key的value来生成新的值


Return Value 返回值
Type: TValue 返回值的类型
The new value for the key. This will be either be addValue (if the key was absent) or the result of updateValueFactory (if the key was present).

key对应的新value,可能是新添加的,也可能是更新的

 

假定目前有一个ConcurrentDictionary<string, Dictionary<string, Color>> dictionary,需要给它添加新的值

方法1:使用委托,写一个符合委托签名的方法

private Dictionary<string,Color> Method(string deviceId,Dictionary<string,Color> dic)
{
return dic;
}

调用的时候,       dictionary.AddOrUpdate(warningInfo.DeviceID, dic, Method);   //将Method作为参数进行传递

 

方法2:使用匿名委托

dictionary.AddOrUpdate(warningInfo.DeviceID, dic, delegate(string deviceId,Dictionary<string,Color> dic1)
{
return dic1;
});

 

方法3:直接使用lambda表达式

 dictionary.AddOrUpdate(warningInfo.DeviceID, dic, (key, value) => value);

 

 

假如有多个ConcurrentDictionary的变量,都需要使用AddOrUpdate函数,并且第三个参数updateValueFactory的逻辑相同【目前假设逻辑仅仅是返回Value的值】

可以将updateValueFactory抽象成一个泛型方法来使用

 /// <summary>
    /// GenericMethod类,用于存放泛型方法[但是这个类本身不是泛型的]
    /// </summary>
    public class GenericMethod
    {
        /// <summary>
        ///  System.Collections.Concurrent.ConcurrentDictionary类中AddOrUpdate方法中的第三个参数对应的一个泛型方法
        ///  目前的AddOrUpdate方法中的第三个三处Func委托只需要返回Value就可以了,不需要做其他的处理
        /// </summary>
        /// 参数
        /// <param name="key">第一个参数</param>
        /// <param name="value">第二个参数</param>
        /// 类型参数
        /// <typeparam name="TKey">第一个参数的类型</typeparam>
        /// <typeparam name="TValue">第二个参数的类型</typeparam>
        /// <returns></returns>
        public static TValue UpdateValueFactory<TKey, TValue>(TKey key, TValue value)
        {
            return value;
        }
    }

 

相关文章:

  • 程序开发心理学阅读笔记——第II篇
  • Swift基础
  • Android学习笔记之AlarmManager有关的定时器和闹钟的实现
  • oozie 安装过程总结
  • Ossim中查看网络流量历史数据
  • linux下安装FFmpeg
  • XML处理类
  • Prototype属性
  • Modeless对话框如何响应快捷键
  • C# UDP(Socket)异步传输文件
  • leetcode 155 Min Stack
  • spring冲刺第二天
  • [转]太阳致敬式瑜伽
  • Linux环境Weblogic10g服务部署
  • ExecutorService生命周期(转)
  • 0基础学习移动端适配
  • conda常用的命令
  • css布局,左右固定中间自适应实现
  • javascript面向对象之创建对象
  • Protobuf3语言指南
  • SpiderData 2019年2月13日 DApp数据排行榜
  • vagrant 添加本地 box 安装 laravel homestead
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 免费小说阅读小程序
  • 三分钟教你同步 Visual Studio Code 设置
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 算法-图和图算法
  • 王永庆:技术创新改变教育未来
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • (1)Nginx简介和安装教程
  • (C语言)字符分类函数
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (笔试题)分解质因式
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (学习日记)2024.01.19
  • (一)80c52学习之旅-起始篇
  • (转)c++ std::pair 与 std::make
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .Net 6.0 处理跨域的方式
  • .Net Core与存储过程(一)
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET成年了,然后呢?
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • ?php echo ?,?php echo Hello world!;?
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [ajaxupload] - 上传文件同时附件参数值
  • [BZOJ5250][九省联考2018]秘密袭击(DP)
  • [C#基础知识系列]专题十七:深入理解动态类型
  • [HackMyVM]靶场Crossbow