0

開始コードは次のとおりです。

Dictionary<string,object> dest=...;
IDictionary<string,object> source=...;

// Overwrite in dest all of the items that appear in source with their new values
// in source. Any new items in source that do not appear in dest should be added.
// Any existing items in dest, that are not in source should retain their current 
// values.
...

foreachソース内のすべての項目を通過するループで明らかにこれを行うことができますが、C# 4.0 (おそらく LINQ) でこれを行う簡単な方法はありますか?

ありがとう

4

2 に答える 2

4

foreachかなり小さいです。なぜ物事を複雑にするのですか?

foreach(var src in source)
{
    dest[src.Key] = src.Value;
}

これを頻繁に繰り返す場合は、拡張メソッドを記述できます。

public static void MergeWith<TKey, TValue>(this Dictionary<TKey,TValue> dest, IDictionary<TKey, TValue> source)
{
    foreach(var src in source)
    {
        dest[src.Key] = src.Value;
    }
}

//usage:
dest.MergeWith(source);

「LINQで」行うことに関しては、クエリ部分は、LINQメソッドに副作用がないことを意味します。副作用があることは、副作用を期待していない私たちにとってしばしば混乱を招きます.

于 2012-06-04T18:48:22.133 に答える
1

これはかなり醜いですが、仕事をします:

source.All(kv => { dest[kv.Key] = kv.Value; return true; });
于 2012-06-04T18:57:49.873 に答える