ConcurrentDictionary的ToDictionary
如果Value是引用,那么在使用Value.Clear()的时候。会清空Value的所有元素,但是不会改变Value的引用
- private static void Main()
- {
- try
- {
- var concurrentDictionary = new ConcurrentDictionary<string, List<int>>();
- concurrentDictionary.TryAdd("chuck", new List<int>() {, , });
- concurrentDictionary.TryAdd("lihu", new List<int>() {, , });
- var dictionary = concurrentDictionary.ToDictionary(x => x.Key, x => x.Value);
- foreach (var list in concurrentDictionary.Values)
- {
- list.Clear();
- }
- foreach (var name in dictionary.Keys)
- {
- Console.WriteLine(name);
- var list = dictionary[name];
- foreach (var number in list)
- {
- Console.Write("\t{0}",number);
- }
- Console.WriteLine();
- }
- }
- catch (Exception ex)
- {
- while (ex != null)
- {
- Console.WriteLine(ex.Message);
- ex = ex.InnerException;
- }
- }
- Console.ReadLine();
- }
还需要测试下Value是List<Student>的情况
- internal class Student
- {
- internal int Id { get; set; }
- internal string Name { get; set; }
- }
- internal class Program
- {
- private static void Main()
- {
- try
- {
- var concurrentDictionary = new ConcurrentDictionary<string, Student>();
- concurrentDictionary.TryAdd("chuck", new Student() {Id = , Name = "chuck"});
- concurrentDictionary.TryAdd("lihu", new Student() {Id = , Name = "lihu"});
- var dictionary = concurrentDictionary.ToDictionary(x => x.Key, x => x.Value);
- foreach (var key in concurrentDictionary.Keys)
- {
- concurrentDictionary[key].Id = ;
- concurrentDictionary[key].Name = "hello world";
- }
- foreach (var name in dictionary.Keys)
- {
- Console.Write(name);
- Console.Write("\tid={0}\tname={1}", dictionary[name].Id, dictionary[name].Name);
- Console.WriteLine();
- }
- }
- catch (Exception ex)
- {
- while (ex != null)
- {
- Console.WriteLine(ex.Message);
- ex = ex.InnerException;
- }
- }
- Console.ReadLine();
- }
- }
Value是值类型的
- private static void Main()
- {
- try
- {
- var concurrentDictionary = new ConcurrentDictionary<string, int>();
- concurrentDictionary.TryAdd("chuck", );
- concurrentDictionary.TryAdd("lihu",);
- var dictionary = concurrentDictionary.ToDictionary(x => x.Key, x => x.Value);
- foreach (var key in concurrentDictionary.Keys)
- {
- concurrentDictionary[key] = ;
- }
- foreach (var name in dictionary.Keys)
- {
- Console.Write(name);
- Console.Write("\t{0}", dictionary[name]);
- Console.WriteLine();
- }
- }
- catch (Exception ex)
- {
- while (ex != null)
- {
- Console.WriteLine(ex.Message);
- ex = ex.InnerException;
- }
- }
- Console.ReadLine();
- }
ConcurrentDictionary的ToDictionary的更多相关文章
- ConcurrentDictionary线程不安全么,你难道没疑惑,你难道弄懂了么?
前言 事情不太多时,会时不时去看项目中同事写的代码可以作个参考或者学习,个人觉得只有这样才能走的更远,抱着一副老子天下第一的态度最终只能是井底之蛙.前两篇写到关于断点传续的文章,还有一篇还未写出,后续 ...
- .net源码分析 - ConcurrentDictionary<TKey, TValue>
List源码分析 Dictionary源码分析 ConcurrentDictionary源码分析 继上篇Dictionary源码分析,上篇讲过的在这里不会再重复 ConcurrentDictionar ...
- 【数据类型】Dictionary 与 ConcurrentDictionary 待续
Dictionary<TKey, TValue> 泛型类提供了从一组键到一组值的映射.通过键来检索值的速度是非常快的,接近于 O(1),这是因为 Dictionary<TKey, T ...
- 基础才是重中之重~ConcurrentDictionary让你的多线程代码更优美
回到目录 ConcurrentDictionary是.net4.0推出的一套线程安全集合里的其中一个,和它一起被发行的还有ConcurrentStack,ConcurrentQueue等类型,它们的单 ...
- 挖一挖C#中那些我们不常用的东西之系列(1)——ToDictionary,ToLookup
这个系列我们看看C#中有哪些我们知道,但是又不知道怎么用,又或者懒得去了解的东西,比如这篇我们要介绍的toDictionary 和ToLookup. 从图中我们看到有四个ToXXX的方法,其中ToAr ...
- hashset hastable dictionary concurrentdictionary区别
1.HashTable 哈希表(HashTable)表示键/值对的集合.在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现 ...
- C#中字典集合HashTable、Dictionary、ConcurrentDictionary三者区别
C#中HashTable.Dictionary.ConcurrentDictionar三者都表示键/值对的集合,但是到底有什么区别,下面详细介绍 一.HashTable HashTable表示键/值对 ...
- 改进ConcurrentDictionary并行使用的性能
上一篇文章“ConcurrentDictionary 对决 Dictionary+Locking”中,我们知道了 .NET 4.0 中提供了线程安全的 ConcurrentDictionary< ...
- ConcurrentDictionary 对决 Dictionary+Locking
在 .NET 4.0 之前,如果我们需要在多线程环境下使用 Dictionary 类,除了自己实现线程同步来保证线程安全之外,我们没有其他选择. 很多开发人员肯定都实现过类似的线程安全方案,可能是通过 ...
随机推荐
- Javascript中字符串转换成Date的方法
//字符串转成Time(dateDiff)所需方法 function stringToTime(string) { var f = string.split(' ', 2); var d = (f[0 ...
- textview点击后selector的pressed无效果
原因: 需要配置 android:clickable="true" 这个跟开发环境有关,我之前用的android studio 就不需要这一项,默认可以点击. ********* ...
- bitmap缩放时抗锯齿
bitmap在进行放大缩小的时候经常会出现边缘锯齿的情况,通常的解决办法是在Paint中加入抗锯齿, paint.setAntiAlias(true); 但是有时候发现这并没有起到抗锯齿的作用,这是可 ...
- Log4j XML配置
问题描述: Log4j XML配置 问题解决: (1)编写log4j.xml配置文件 注: 如上的XML文件必须以log4j.xml文件命名,否则无法读取配置文件,同样的如果 ...
- 剑指offer--面试题8
题目:求旋转数组中的最小数字 以下为自己所写代码: #include "stdafx.h" #include <iostream> #include <excep ...
- 阿里云ubuntu12.04下安装使用mongodb
阿里云ubuntu12.04下安装mongodb apt-get install mongodb 阿里云ubuntu12.04下卸载mongodb,同时删除配置文件 apt-get pur ...
- WebStorm 9 注册码
UserName:William ===== LICENSE BEGIN ===== 45550-12042010 00001SzFN0n1bPII7FnAxnt0DDOPJA INauvJkeVJB ...
- CKFinder 1.4.3 任意文件上传漏洞
CKFinder 是国外一款非常流行的所见即所得文字编辑器,其1.4.3 asp.net版本存在任意文件上传漏洞,攻击者可以利用该漏洞上传任意文件. CKFinder在上传文件的时候,强制将文件名(不 ...
- Unity UGUI —— 无限循环List(转载)
using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.UI; ...
- 【Linux高频命令专题(17)】head
概述 head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾. 命令格式 hea ...