pau*_*ter 1 c# .net-4.0 concurrentdictionary
如果值不存在,我想将其初始化为 0。否则它应该增加现有值。
ConcurrentDictionary<int, int> dic = new ConcurrentDictionary<int, int>();
dic.AddOrUpdate(1, 0, (key, old) => old++);
dic.AddOrUpdate(2, 0, (key, old) => old++);
Run Code Online (Sandbox Code Playgroud)
此时,字典的键为 1 和 2,每个值为 0。
dic.AddOrUpdate(1, 0, (key, old) => old++);
Run Code Online (Sandbox Code Playgroud)
此时,键 1 的值应该是 1,而键 2 的值应该是 0,但是,两者的值都是 0。知道为什么吗?
你有一个误解:
Run Code Online (Sandbox Code Playgroud)dic.AddOrUpdate(1, 0, (key, old) => old++);此时,键 1 的值应为 1
当您使用old++它时,它返回要存储的修改前的原始值。就好像你做了相当于:
dic.AddOrUpdate(1, 0, (key, old) =>
{
var original = old;
old = old + 1;
return original;
});
Run Code Online (Sandbox Code Playgroud)
你想要++old哪个将返回修改后的值或只是使用
dic.AddOrUpdate(1, 0, (key, old) => old + 1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
663 次 |
| 最近记录: |