This partly depends on what you want to happen if you run into duplicates. For instance, you could do:
var result = dictionaries.SelectMany(dict => dict)
.ToDictionary(pair => pair.Key, pair => pair.Value);
That will throw an exception if you get any duplicate keys.
EDIT: If you use ToLookup then you’ll get a lookup which can have multiple values per key. You could then convert that to a dictionary:
var result = dictionaries.SelectMany(dict => dict)
.ToLookup(pair => pair.Key, pair => pair.Value)
.ToDictionary(group => group.Key, group => group.First());
It’s a bit ugly – and inefficient – but it’s the quickest way to do it in terms of code. (I haven’t tested it, admittedly.)
You could write your own ToDictionary2 extension method of course (with a better name, but I don’t have time to think of one now) – it’s not terribly hard to do, just overwriting (or ignoring) duplicate keys. The important bit (to my mind) is using SelectMany
, and realising that a dictionary supports iteration over its key/value pairs.