1

プロパティが既存のキー/値以上かどうかを確認するメソッドのfunc一部を記述する方法がわかりません。ConcurrentDictionary.AddOrUpdateUpdatedOn

次のPOCOを考えると、.NET を使用ConcurrentDictionary.AddOrUpdateして辞書内の項目 (存在する場合) を更新するにはどうすればよいですか?

(疑似コード)

var results = new ConcurrentDictionary<string, Foo>();

public class Foo
{
    string Id;
    string Name;
    string Whatever;
    DateTime UpdatedOn;
}

私は2 番目のオーバーロードされたメソッド( ) を見てきましたが、メソッドの一部AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)を実行する方法がわかりません。Func

4

1 に答える 1

2

問題の関数パラメーターは、キーとそのキーの既存の値を受け取り、そのキーのディクショナリに保持する必要がある値を返すことが期待されています。

したがって、既存の値を更新する場合は、新しい値ではなく、値を更新して返す関数を作成するだけです。


完全な例を次に示します。

var d = new ConcurrentDictionary<string, Foo>();

// an example value
var original_value = new Foo {UpdatedOn = new DateTime(1990, 1, 1)};
d.TryAdd("0", original_value);

var newValue = new Foo {UpdatedOn = new DateTime(2000, 1, 1)};

// try to add the newValue with the same key
d.AddOrUpdate("0", 
              newValue,  
              (key, old_value) => {

                // if the DateTime value is greater,
                // then update the existing value
                if (newValue.UpdatedOn > old_value.UpdatedOn)
                    old_value.UpdatedOn = newValue.UpdatedOn;

                // return old_value, since it should be updated
                // instead of being replaced
                return old_value;
            });

dUpdatedOn2000-1-1に更新された元の要素のみが含まれるようになりました。

于 2014-05-27T12:21:49.467 に答える