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 回答