3

我有一个ConcurrentDictionary. 我使用它的AddOrUpdate方法来操作它的项目。

我的问题是:是否可以使用AddOrUpdate's update 参数来包含 if 语句?例如 myConcurrentDictionary包含具有字符串 Id 和 DateTime 日期属性的对象。

我想 - 添加一个新对象,如果具有给定 Id 的对象不存在 - 更新它,如果新对象的日期等于或大于现有的,如果小于,则不做任何事情。

在我的例子中:

Dictionary.AddOrUpdate(testObject.Id,testObject,(k, v) => v);

我应该改变

(k, v) => v

if(v.Date >= existingItem.Date) (k, v) => v
else do nothing
4

2 回答 2

5

v是当前存在于集合中的值,所以什么都不做就返回它。

Dictionary.AddOrUpdate(testObject.Id,testObject,(k, v) => 
    (v.Date >= existingItem.Date) ? testObject : v);

更具可读性:

Dictionary.AddOrUpdate(testObject.Id,testObject,(k, v) => 
{
    if(v.Date >= existingItem.Date) 
        return testObject; 
    else
        return v;
});
于 2012-03-05T16:27:47.697 回答
3

实现此目的的一种简单方法是,updateValueFactory如果新值不更大,则您的 lambda 将返回原始值:

Dictionary.AddOrUpdate(testObject.Id, testObject,
    (key, value) => testObject.Date > value.Date ? testObject : value);
于 2012-03-05T16:27:47.010 回答