我需要将一条记录从一个字典复制到另一个字典,只需一个。我已经尝试了下面的内容,它不会复制一个,而是因为它在循环中所有内容。我需要检查密钥是否已经复制到第二个字典中,这就是我在第一个字典上循环的原因。
foreach (int key in firstDict.Keys)
{
if (!secondDict.ContainsKey(key))
secondDict.Add(key, firstDict[key]);
else {break;}
}
请帮助,如果您需要更多信息,请告诉我。
答案 0 :(得分:4)
试试这个:
foreach (int key in firstDict.Keys)
{
if (!secondDict.ContainsKey(key))
{
secondDict.Add(key, firstDict[key]);
break;
}
}
答案 1 :(得分:3)
比已发布的其他答案更有效(保存一个字典查找)。
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;
}
答案 2 :(得分:1)
我想你在某个变量中拥有该行的键,我将调用key
。例如,我将其值设置为3。
int key = 3;
if (!secondDict.ContainsKey(key))
secondDict.Add(key, firstDict[key]);
编辑: 如果您只想要在secondDict中出现的任何单个条目:
foreach (KeyValuePair<int, MyValueType> kvp in firstDict) //Replace MyValueType with the real value type in firstDict
{
if (!secondDict.ContainsKey(kvp.Key))
{
secondDict.Add(kvp.Key, kvp.Value);
break;
}
}
答案 3 :(得分:1)
删除else子句
foreach (int key in firstDict.Keys)
{
if (!secondDict.ContainsKey(key)) {
secondDict.Add(key, firstDict[key]);
break;
}
}