ConcurrentDictionary で値を更新するエレガントな方法を見つけようとしています。以下に、達成しようとしていることの簡単な例を作成しました。
ConcurrentDictionary<int, MyDataClass> dataLookup = new ConcurrentDictionary<int, MyDataClass>();
// Initialise the example dataLookup with some dummy data
new List<MyDataClass>
{
new MyDataClass { Id = 1, ValueProperty = 0 },
new MyDataClass { Id = 2, ValueProperty = 0 },
new MyDataClass { Id = 3, ValueProperty = 0 },
new MyDataClass { Id = 4, ValueProperty = 0 },
new MyDataClass { Id = 5, ValueProperty = 0 }
}.ForEach(myClass => dataLookup.TryAdd (myClass.Id, myClass));
// incoming results that need to be fed into the above dataLookup
List<MyDataClass> newDataReceived = new List<MyDataClass>
{
new MyDataClass { Id = 1, ValueProperty = 111 },
new MyDataClass { Id = 3, ValueProperty = 222 },
new MyDataClass { Id = 5, ValueProperty = 333 }
};
したがって、上記の例では、dataLookup ConcurrentDictionary の ValueProperty を 1、3、5 の ID でそれぞれ 111、222、333 に設定したいと考えています。newDataReceived オブジェクトを好きなように変更できますが、concurrentDictionary としての dataLookup にかなりこだわっています。
現時点では、リストを反復処理していますが、LINQ を使用してこのタスクをより効率的にするための提案を探しています。