1

如果 value 尚不存在,我想将其初始化为 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。知道为什么吗?

4

2 回答 2

5

你有一个误解:

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);
于 2015-01-29T16:24:46.003 回答
1

试试这个 :

dic.AddOrUpdate(1, 0, (key, old) => old + 1);

我认为那是因为 old 是 Func<> 的参数,它不能被修改。

于 2015-01-29T16:26:07.700 回答