代码 :
Dictionary<string, IList<PuntoMappa>> first = new Dictionary<string, IList<PuntoMappa>>();
Dictionary<string, IList<PuntoMappa>> second = new Dictionary<string, IList<PuntoMappa>>();
second = second.Union(first);
似乎我错过了明确的演员表?
second
is a Dictionary<string, IList<PuntoMappa>>
while 你的返回类型Union
is IEnumerable<KeyValuePair<string, IList<PuntoMappa>>>
。您需要将其转换回字典。
second = second.Union(first).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
正如评论指出的那样,如果您有重复的键,这可能不起作用。相反,如果您想将列表与两个字典中的匹配键合并,那么您可以使用Join
:
second = first.Join(second, kvp => kvp.Key, kvp => kvp.Key, (pair1, pair2) => new { Name = pair1.Key, PuntoMappas = pair1.Value.Union(pair2.Value) })
.ToDictionary(p => p.Name, p => p.PuntoMappas.ToList());
“Union”返回一个 IEnumerable - 而不是字典。
如果你想要一个 IEnumerable - 你需要一个新变量:
var newEnumerable = second.Union(first);
或者 - 创建一个新字典:
second = second.Union(first).ToDictionary(kv => kv.Key, kv => kv.Value);
Union
将您的两个字典视为IEnumerable<KeyValuePair<string, IList<PuntoMappa>>
s - 它实际上只是“我是否已经返回了这个 KVP,如果没有返回它,否则不要”,而不是尝试任何巧妙的从匹配键合并列表。
为了实现我相信您正在寻找的东西,您需要类似的东西
first.Concat(second)
.GroupBy(kvp => kvp.Key)
.ToDictionary(
g => g.Key,
g => g.SelectMany(kvp => kvp.Value).ToList());