比已发布的其他答案更有效率(保存一个字典查找)。
foreach(var kvp in firstDict)
{
if(!secondDict.ContainsKey(kvp.Key))
{
secondDict[kvp.Key] = kvp.Value;
break;
}
}
如果你熟悉LINQ,你可能希望避免整个foreach ... break
模式。这种模式非常丑陋,更重要的是令人困惑:看起来你想复制一切,当你真的想复制一个。你的问题本身就是证明它有多混淆的证明:如果你没有得到一个简单的模式,那可能意味着模式不是很好。以下内容将完成这项工作,并且很清楚它只会将第一个字典中的一个(最多)条目添加进去。
var missingEntry = firstDict
// cast beacause KeyValuePair is a struct and I want to detect the case where there is no missing entry
.Cast<KeyValuePair<TKey,TValue>?>()
.FirstOrDefault(kvp => !secondDict.ContainsKey(kvp.Key));
// check whether there truely is a missing entry.
if (missingEntry != null)
{
secondDict[missingEntry.Key] = missingEntry.Value;
}
您将不得不决定。如果你想复制*一个*条目,你需要知道它的关键。如果你已经知道为什么*所有*条目都被复制,为什么不修复它?要检查记录是否未被复制,只需使用“ContainsKey”。字典不是列表 - 每个密钥只能出现一次。 – 2014-09-10 08:42:19
你想复制一个单一的条目,但你的意思是任何条目? – 2014-09-10 08:43:13
如果第一个词典中的任何键已经在第二个词典中,您确定要让该foreach停止吗? (因为'else'会这样做) – 2014-09-10 08:44:10