C# 如何使用linq用默认值填充字典?

C# 如何使用linq用默认值填充字典?,c#,linq,C#,Linq,Dictionary1有一个字符串的实体键,比如说“Def3” 所以它看起来像: Ent1, Def3 Ent3, Def3 Ent1, Def3 Ent2, Def2 Ent3, Def3 Dictionary2具有与另一个字符串关联的所有实体,该字符串并不重要 Ent1, Unimportant Ent2, Unimportant Ent3, Unimportant 我知道一个默认字符串Def2,我想为Dictionary2中不存在于Dictionary1中的每个实体放入Diction

Dictionary1有一个字符串的实体键,比如说“Def3”

所以它看起来像:

Ent1, Def3
Ent3, Def3
Ent1, Def3
Ent2, Def2
Ent3, Def3
Dictionary2具有与另一个字符串关联的所有实体,该字符串并不重要

Ent1, Unimportant
Ent2, Unimportant
Ent3, Unimportant
我知道一个默认字符串Def2,我想为Dictionary2中不存在于Dictionary1中的每个实体放入Dictionary1

如何更新字典1,使其看起来像:

Ent1, Def3
Ent3, Def3
Ent1, Def3
Ent2, Def2
Ent3, Def3
仅供参考:这些是大得多的词典的简短示例,因此简单的逐案插入在这里不起作用


更新:好的,让我澄清一下。如果Dictionary2的键不是Dictionary1中的键,请使用字符串(“Def2”)添加Dictionary2的键。

您可以将LINQ用于此作业:

var Dictionary3 = Dictionary2.ToDictionary(x => x.Key, 
    x => Dictionary1.ContainsKey(x.Key) ? Dictionary1[x.Key] : "Def2");

因此,您希望Dictionary2中所有在Dictionary1中没有键的键都被添加为Dictionary1中值为def2的键

小步骤:

var allKeysInDict1 = Dictionary1.Keys;
var allKeysInDict2 = Dictionary2.Keys;
var missingKeysInDict1 = allKeysInDict2.Except(allKeysInDict1);
foreach (var missingKey in missingKeysInDict1)
{
    dictionary1.Add(missingKey, def2);
}

使用一个非抽象的东西,如
Ent1
Def3
,这将更加清晰。非常混乱。
TryGetValue
ContainsKey
更可取。