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 类,除了自己实现线程同步来保证线程安全之外,我们没有其他选择. 很多开发人员肯定都实现过类似的线程安全方案,可能是通过 ...
随机推荐
- 【iis错误码】IIS 服务 这些年遇到的错误码
II 发生错误,客户端似乎有问题.例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息. 400 - 错误的请求. 401 - 访问被拒绝. -- 暴力添加everyone用户, i ...
- XCODE快捷键和功能汇总篇(不断更新)
快捷键 command+b(build) 编译 command+r(run) 运行编译后程序鼠标放在代码元素上,按command然后单击,可以看到元素的属性
- MVC的小知识点
1.MVC的前台页面编译完之后,也会生成一个前台页面类.在前天页面中加入这段代码this.GetType().Assembly.GetLocation()得到当前类所在的程序集,可以查看其所在的程序, ...
- android 讯飞语音识别(离线)注意事项
讯飞语音识别:使用注意事项:mainfest.xml中一定要记得权限写进去21001:我的情况是没有写SpeechApp类,并且需要在application中注册:20005:无匹配结果23300:本 ...
- 编写一个函数,接受三个string参数,s,oldVal和newVal。使用迭代器及insert和erase函数将s中所有oldVal替换为newVal。测试你的程序,用他替换通用的简写形式,如,将“tho”,将“”“”
// test14.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- JS实现Web网页打印功能(IE)
问题描述: JS实现Web网页打印功能 问题解决: 这里主要使用WebBrowser控件的ExeWB在IE中打印功能的实现 WebBrowser介绍: WebBrows ...
- spring @resource @ Autowired
Spring中什么时候用@Resource,什么时候用@service 当你需要定义某个类为一个bean,则在这个类的类名前一行使用@Service("XXX"),就相当于讲这个类 ...
- URAL 1073 Square Country(DP)
题目链接 题意 :这个人要投资地,每块地都是正方形并且边长都是整数,他希望他要买的地尽量的少碎块.每买一块地要付的钱是边长的平方,而且会得到一个一份证书,给你一个钱数,让你求出能得到的证书个数. 思路 ...
- Pycharm中的实用功能(网上看到的,感觉还不错)
实时比较 PyCharm 对一个文件里你做的改动保持实时的跟踪,通过在编辑器的左侧栏显示一个蓝色的标记.这一点非常方便,我之前一直是在Eclipse里面用命令“Compare against HEAD ...
- lintcode:Flip Bits 将整数A转换为B
题目: 将整数A转换为B 如果要将整数A转换为B,需要改变多少个bit位? 样例 如把31转换为14,需要改变2个bit位. ()10=()2 ()10=()2 挑战 你能想出几种方法? 解题: A- ...