我想将值初始化为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.任何想法为什么?
答案 0 :(得分:4)
你有一种误解:
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);
答案 1 :(得分:1)
试试这个:
dic.AddOrUpdate(1, 0, (key, old) => old + 1);
我认为因为旧版是Func&lt;&gt;的参数,所以无法修改。