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 の戻り値の型はUnionisIEnumerable<KeyValuePair<string, IList<PuntoMappa>>>です。それを辞書に戻す必要があります。

second = second.Union(first).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

コメントが指摘しているように、キーが重複している場合、これは機能しない可能性があります。代わりに、2 つの辞書で一致するキーを使用してリストを結合したい場合は、次を使用できます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あなたの2つの辞書をsと見なしますIEnumerable<KeyValuePair<string, IList<PuntoMappa>>-文字通り、「この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 に答える