如果Value是引用,那么在使用Value.Clear()的时候。会清空Value的所有元素,但是不会改变Value的引用

  1. private static void Main()
  2. {
  3. try
  4. {
  5. var concurrentDictionary = new ConcurrentDictionary<string, List<int>>();
  6. concurrentDictionary.TryAdd("chuck", new List<int>() {, , });
  7. concurrentDictionary.TryAdd("lihu", new List<int>() {, , });
  8.  
  9. var dictionary = concurrentDictionary.ToDictionary(x => x.Key, x => x.Value);
  10. foreach (var list in concurrentDictionary.Values)
  11. {
  12. list.Clear();
  13. }
  14.  
  15. foreach (var name in dictionary.Keys)
  16. {
  17. Console.WriteLine(name);
  18. var list = dictionary[name];
  19. foreach (var number in list)
  20. {
  21. Console.Write("\t{0}",number);
  22. }
  23. Console.WriteLine();
  24. }
  25.  
  26. }
  27. catch (Exception ex)
  28. {
  29. while (ex != null)
  30. {
  31. Console.WriteLine(ex.Message);
  32. ex = ex.InnerException;
  33. }
  34. }
  35. Console.ReadLine();
  36. }

还需要测试下Value是List<Student>的情况

  1. internal class Student
  2. {
  3. internal int Id { get; set; }
  4. internal string Name { get; set; }
  5. }
  6.  
  7. internal class Program
  8. {
  9. private static void Main()
  10. {
  11. try
  12. {
  13. var concurrentDictionary = new ConcurrentDictionary<string, Student>();
  14. concurrentDictionary.TryAdd("chuck", new Student() {Id = , Name = "chuck"});
  15. concurrentDictionary.TryAdd("lihu", new Student() {Id = , Name = "lihu"});
  16.  
  17. var dictionary = concurrentDictionary.ToDictionary(x => x.Key, x => x.Value);
  18. foreach (var key in concurrentDictionary.Keys)
  19. {
  20. concurrentDictionary[key].Id = ;
  21. concurrentDictionary[key].Name = "hello world";
  22. }
  23.  
  24. foreach (var name in dictionary.Keys)
  25. {
  26. Console.Write(name);
  27. Console.Write("\tid={0}\tname={1}", dictionary[name].Id, dictionary[name].Name);
  28. Console.WriteLine();
  29. }
  30.  
  31. }
  32. catch (Exception ex)
  33. {
  34. while (ex != null)
  35. {
  36. Console.WriteLine(ex.Message);
  37. ex = ex.InnerException;
  38. }
  39. }
  40. Console.ReadLine();
  41. }
  42. }

Value是值类型的

  1. private static void Main()
  2. {
  3. try
  4. {
  5. var concurrentDictionary = new ConcurrentDictionary<string, int>();
  6. concurrentDictionary.TryAdd("chuck", );
  7. concurrentDictionary.TryAdd("lihu",);
  8.  
  9. var dictionary = concurrentDictionary.ToDictionary(x => x.Key, x => x.Value);
  10. foreach (var key in concurrentDictionary.Keys)
  11. {
  12. concurrentDictionary[key] = ;
  13. }
  14.  
  15. foreach (var name in dictionary.Keys)
  16. {
  17. Console.Write(name);
  18. Console.Write("\t{0}", dictionary[name]);
  19. Console.WriteLine();
  20. }
  21.  
  22. }
  23. catch (Exception ex)
  24. {
  25. while (ex != null)
  26. {
  27. Console.WriteLine(ex.Message);
  28. ex = ex.InnerException;
  29. }
  30. }
  31. Console.ReadLine();
  32. }

ConcurrentDictionary的ToDictionary的更多相关文章

  1. ConcurrentDictionary线程不安全么,你难道没疑惑,你难道弄懂了么?

    前言 事情不太多时,会时不时去看项目中同事写的代码可以作个参考或者学习,个人觉得只有这样才能走的更远,抱着一副老子天下第一的态度最终只能是井底之蛙.前两篇写到关于断点传续的文章,还有一篇还未写出,后续 ...

  2. .net源码分析 - ConcurrentDictionary<TKey, TValue>

    List源码分析 Dictionary源码分析 ConcurrentDictionary源码分析 继上篇Dictionary源码分析,上篇讲过的在这里不会再重复 ConcurrentDictionar ...

  3. 【数据类型】Dictionary 与 ConcurrentDictionary 待续

    Dictionary<TKey, TValue> 泛型类提供了从一组键到一组值的映射.通过键来检索值的速度是非常快的,接近于 O(1),这是因为 Dictionary<TKey, T ...

  4. 基础才是重中之重~ConcurrentDictionary让你的多线程代码更优美

    回到目录 ConcurrentDictionary是.net4.0推出的一套线程安全集合里的其中一个,和它一起被发行的还有ConcurrentStack,ConcurrentQueue等类型,它们的单 ...

  5. 挖一挖C#中那些我们不常用的东西之系列(1)——ToDictionary,ToLookup

    这个系列我们看看C#中有哪些我们知道,但是又不知道怎么用,又或者懒得去了解的东西,比如这篇我们要介绍的toDictionary 和ToLookup. 从图中我们看到有四个ToXXX的方法,其中ToAr ...

  6. hashset hastable dictionary concurrentdictionary区别

    1.HashTable 哈希表(HashTable)表示键/值对的集合.在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现 ...

  7. C#中字典集合HashTable、Dictionary、ConcurrentDictionary三者区别

    C#中HashTable.Dictionary.ConcurrentDictionar三者都表示键/值对的集合,但是到底有什么区别,下面详细介绍 一.HashTable HashTable表示键/值对 ...

  8. 改进ConcurrentDictionary并行使用的性能

    上一篇文章“ConcurrentDictionary 对决 Dictionary+Locking”中,我们知道了 .NET 4.0 中提供了线程安全的 ConcurrentDictionary< ...

  9. ConcurrentDictionary 对决 Dictionary+Locking

    在 .NET 4.0 之前,如果我们需要在多线程环境下使用 Dictionary 类,除了自己实现线程同步来保证线程安全之外,我们没有其他选择. 很多开发人员肯定都实现过类似的线程安全方案,可能是通过 ...

随机推荐

  1. Javascript中字符串转换成Date的方法

    //字符串转成Time(dateDiff)所需方法 function stringToTime(string) { var f = string.split(' ', 2); var d = (f[0 ...

  2. textview点击后selector的pressed无效果

    原因: 需要配置  android:clickable="true" 这个跟开发环境有关,我之前用的android studio 就不需要这一项,默认可以点击. ********* ...

  3. bitmap缩放时抗锯齿

    bitmap在进行放大缩小的时候经常会出现边缘锯齿的情况,通常的解决办法是在Paint中加入抗锯齿, paint.setAntiAlias(true); 但是有时候发现这并没有起到抗锯齿的作用,这是可 ...

  4. Log4j XML配置

    问题描述:     Log4j  XML配置 问题解决:     (1)编写log4j.xml配置文件 注:     如上的XML文件必须以log4j.xml文件命名,否则无法读取配置文件,同样的如果 ...

  5. 剑指offer--面试题8

    题目:求旋转数组中的最小数字 以下为自己所写代码: #include "stdafx.h" #include <iostream> #include <excep ...

  6. 阿里云ubuntu12.04下安装使用mongodb

    阿里云ubuntu12.04下安装mongodb   apt-get install mongodb 阿里云ubuntu12.04下卸载mongodb,同时删除配置文件     apt-get pur ...

  7. WebStorm 9 注册码

    UserName:William ===== LICENSE BEGIN ===== 45550-12042010 00001SzFN0n1bPII7FnAxnt0DDOPJA INauvJkeVJB ...

  8. CKFinder 1.4.3 任意文件上传漏洞

    CKFinder 是国外一款非常流行的所见即所得文字编辑器,其1.4.3 asp.net版本存在任意文件上传漏洞,攻击者可以利用该漏洞上传任意文件. CKFinder在上传文件的时候,强制将文件名(不 ...

  9. Unity UGUI —— 无限循环List(转载)

    using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.UI; ...

  10. 【Linux高频命令专题(17)】head

    概述 head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾. 命令格式 hea ...