ConcurrentDictionary AddOrUpdate 通过谓词

Tom*_*Tom 3 .net c# .net-4.0 concurrentdictionary

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

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

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

在我的例子中:

Dictionary.AddOrUpdate(testObject.Id,testObject,(k, v) => v);
Run Code Online (Sandbox Code Playgroud)

我应该改变

(k, v) => v
Run Code Online (Sandbox Code Playgroud)

if(v.Date >= existingItem.Date) (k, v) => v
else do nothing
Run Code Online (Sandbox Code Playgroud)

M.B*_*ock 5

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

Dictionary.AddOrUpdate(testObject.Id,testObject,(k, v) => 
    (v.Date >= existingItem.Date) ? testObject : v);
Run Code Online (Sandbox Code Playgroud)

更具可读性:

Dictionary.AddOrUpdate(testObject.Id,testObject,(k, v) => 
{
    if(v.Date >= existingItem.Date) 
        return testObject; 
    else
        return v;
});
Run Code Online (Sandbox Code Playgroud)