1

代码 :

    Dictionary<string, IList<PuntoMappa>> first = new Dictionary<string, IList<PuntoMappa>>();
    Dictionary<string, IList<PuntoMappa>> second = new Dictionary<string, IList<PuntoMappa>>();
    second = second.Union(first);

似乎我错过了明确的演员表?

4

3 回答 3

4

secondis a Dictionary<string, IList<PuntoMappa>>while 你的返回类型Unionis 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());
于 2012-11-16T13:35:40.830 回答
2

“Union”返回一个 IEnumerable - 而不是字典。

如果你想要一个 IEnumerable - 你需要一个新变量:

var newEnumerable = second.Union(first);

或者 - 创建一个新字典:

second = second.Union(first).ToDictionary(kv => kv.Key, kv => kv.Value);
于 2012-11-16T13:38:11.543 回答
0

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());
于 2012-11-16T13:39:56.157 回答