Dictionary Union to Dictionary? [Duplicate]

In my code I have the line

var d3 = d.Union(d2).ToDictionary(s => s.Key, s => s.Value);

This feels odd because its likely I'll do this a lot. There is no .ToDictionary(). How do I union a dictionary and keep it as a dictionary?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = new List<Tuple<int, string>>();
            list.Add(new Tuple<int, string>(1, "a"));
            list.Add(new Tuple<int, string>(3, "b"));
            list.Add(new Tuple<int, string>(9, "c"));
            var d = list.ToDictionary(
                s => s.Item1, 
                s => s.Item2);
            list.RemoveAt(2);
            var d2 = list.ToDictionary(
                s => s.Item1,
                s => s.Item2);
            d2[5] = "z";
            var d3 = d.Union(d2).ToDictionary(s => s.Key, s => s.Value);
        }
    }
}
1

The problem with using the "straight" Union is that it does not interpret the dictionaries as dictionaries; it interprets dictionaries as IEnumerable<KeyValyePair<K,V>>. That is why you need that final ToDictionary step.

If your dictionaries do not have duplicate keys, this should work a little faster:

var d3 = d.Concat(d2).ToDictionary(s => s.Key, s => s.Value);

Note that the Union method will break too if the two dictionaries contain the same key with different values. Concat will break if the dictionaries contain the same key even if it corresponds to the same value.

2
Maya Lin-Takahashi

Maya Lin-Takahashi

Consumer Tech & Gadget Reviewer

Maya is a hardware enthusiast who tests and reviews smart home devices, smartphones, wearables, and audio gear. She focuses on practical consumer value and build quality.

Share this article
Twitter Facebook Pinterest