3

私は持っていConcurrentDictionaryます。AddOrUpdateそのメソッドを使用してアイテムを操作します。

私の質問は:AddOrUpdateの update パラメータを使用して if ステートメントを含めることは可能ですか? たとえば、 myConcurrentDictionaryには、文字列 Id と DateTime Date プロパティを持つオブジェクトが含まれています。

したい - 指定された 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は、新しい値が大きくない場合にラムダが元の値を返すようにすることです。

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