C# 如何用同一个键合并两本词典?
词典1:C# 如何用同一个键合并两本词典?,c#,linq,union,C#,Linq,Union,词典1: Dictionary<string, IList<PuntoMappa>> PuntiCantieriCMS = new Dictionary<string, IList<PuntoMappa>>(); 但是当两个键相似时,它会触发一个异常。这应该可以工作: Dictionary<string, List<PuntoMappa>> unioned = PuntiCantieriCMS .Conca
Dictionary<string, IList<PuntoMappa>> PuntiCantieriCMS = new Dictionary<string, IList<PuntoMappa>>();
但是当两个键相似时,它会触发一个异常。这应该可以工作:
Dictionary<string, List<PuntoMappa>> unioned = PuntiCantieriCMS
.Concat(PuntiCantieri)
.GroupBy(kv => kv.Key)
.ToDictionary(kv => kv.Key, kv => kv.SelectMany(g => g.Value).ToList());
请注意,我已将值从IList更改为List。这应该可以:
Dictionary<string, List<PuntoMappa>> unioned = PuntiCantieriCMS
.Concat(PuntiCantieri)
.GroupBy(kv => kv.Key)
.ToDictionary(kv => kv.Key, kv => kv.SelectMany(g => g.Value).ToList());
请注意,我已将值从IList更改为List。可能重复的停止将其标记为的重复。后一个问题不关心在发生键冲突的情况下会发生什么,而这个问题明确指出列表必须合并。的可能副本停止将其标记为的副本。后一个问题不关心在键冲突的情况下会发生什么,而这个问题清楚地指出列表必须合并,但它返回不同的类型。事实上,我不能做PuntiCantieri=联合;之后Linq@markzzz:如果需要IList,请相应地对其进行强制转换:。ToDictionarykv=>kv.Key,kv=>IListkv.SelectManyg=>g.Value.ToList;我想是因为我需要字典,而不是列表:O@markzzz:是的,你看到我的便条了吗我的最后一条评论显示了如何将它转换为IList。@AhmedKRAIEM:不,我想这是指IList。列表隐式地是IList,但字典不是字典。编译器不喜欢这样,但它返回不同的类型。事实上,我不能做PuntiCantieri=联合;之后Linq@markzzz:如果需要IList,请相应地对其进行强制转换:。ToDictionarykv=>kv.Key,kv=>IListkv.SelectManyg=>g.Value.ToList;我想是因为我需要字典,而不是列表:O@markzzz:是的,你看到我的便条了吗我的最后一条评论显示了如何将它转换为IList。@AhmedKRAIEM:不,我想这是指IList。列表隐式地是IList,但字典不是字典。编译器不喜欢这样。
Dictionary<string, List<PuntoMappa>> unioned = PuntiCantieriCMS
.Concat(PuntiCantieri)
.GroupBy(kv => kv.Key)
.ToDictionary(kv => kv.Key, kv => kv.SelectMany(g => g.Value).ToList());
foreach(var kvp in PuntiCantieri)
{
if(PuntiCantieriCMS.ContainsKey(kvp.Key))
{
kvp.Value.AddRange(PuntiCantieriCMS[kvp.Key]);
}
}