我正在C#中开发一个以.NET 3.5为目标的应用程序。其中,我有2个类似的字典,其中包含我的应用中特定元素集的验证条件。两本字典都有相同的签名。第一个词典具有默认设置,第二个词典包含一些用户定义的设置。C#合并2个字典
var default_settings = new Dictionary<string, MyElementSettings>();
var custom_settings = new Dictionary<string, MyElementSettings>();
我想将2个字典组合成一个包含两个字典元素的字典。
我遇到的问题是两个字典都可能有一些相同的键值。我想要的基本规则是将这两个词典组合起来,并且如果custom_settings中的任何键已经存在于default_settings中,则custom_settings值将覆盖default_settings值。我最好的解决方案只是一个foreach循环,检查其他字典中是否存在密钥,如果没有,添加它。
foreach (var item in custom_settings)
{
if (default_settings.ContainsKey(item.Key))
default_settings[item.Key] = item.Value;
else
default_settings.Add(item.Key, item.Value);
}
我已经做了一些基本的LINQ查询,但我仍在努力学习更先进的东西。我已经看到了一些将合并2个字典的查询,但大多数都涉及用重复键对任何元素进行分组,或者只返回一个只有重复键的集合/是否有一个LINQ查询或表达式可以模仿foreach循环的行为我在用?
+1点#2(http://msdn.microsoft.com/en-us/library/k7z0zy8k.aspx) – Brad 2010-10-25 13:59:12
+1教我的东西我不知道。我相对自我教育与C#,并不知道你可以用字典做到这一点。 – psubsee2003 2010-10-25 14:09:54
@ psubsee2003:欢呼声。我很确定我使用了与您的代码相同的模式,然后才发现它是多余的(偶然,正在用反射器探索)。 – Ani 2010-10-25 14:17:17