我想将值初始化为0(如果尚不存在)。否则,它将增加现有值。
ConcurrentDictionary<int, int> dic = new ConcurrentDictionary<int, int>();
dic.AddOrUpdate(1, 0, (key, old) => old++);
dic.AddOrUpdate(2, 0, (key, old) => old++);
此时,字典具有1和2的键,每个键的值均为0。
dic.AddOrUpdate(1, 0, (key, old) => old++);
在这一点上,键1的值应为1,而键2的值应为0,但是两者的值均为0。为什么?
您有一个误解:
dic.AddOrUpdate(1, 0, (key, old) => old++);
此时,密钥1的值应为1
使用时,old++
它将返回要存储的修改之前的原始值。就像您做了以下操作一样:
dic.AddOrUpdate(1, 0, (key, old) =>
{
var original = old;
old = old + 1;
return original;
});
您想要++old
哪个将返回修改后的值或只使用
dic.AddOrUpdate(1, 0, (key, old) => old + 1);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句