我有ConcurrentDictionary
。我使用它的AddOrUpdate
方法来操纵它的项目。
我的问题是:是否可以使用AddOrUpdate
的update参数来包含if语句?例如。我的ConcurrentDictionary
包含具有字符串Id和DateTime Date属性的对象。
我想 - 如果具有给定Id的对象不存在,则向其添加新对象 - 如果新对象的Date等于或大于现有的Date,则更新它,如果它小于,则不更新。
在我的例子中:
Dictionary.AddOrUpdate(testObject.Id,testObject,(k, v) => v);
我应该改变
(k, v) => v
到
if(v.Date >= existingItem.Date) (k, v) => v
else do nothing
答案 0 :(得分:4)
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;
});
答案 1 :(得分:3)
实现此目的的一种简单方法是,如果新值不大,您的updateValueFactory
lambda将返回原始值:
Dictionary.AddOrUpdate(testObject.Id, testObject,
(key, value) => testObject.Date > value.Date ? testObject : value);