Вы правы, вы можете сделать это в Linq.Тем не менее, вы должны быть осторожны с тем, как равенство реализовано на вашем TValue
(вы должны быть осторожны и на TKey
, конечно, но вы сказали, что это были строки, так что равенство четко определено).
void Main()
{
var a1 = new List<KeyValuePair<string, int>>();
var a2 = new List<KeyValuePair<string, int>>();
a1.Add(new KeyValuePair<string, int>("A", 1));
a1.Add(new KeyValuePair<string, int>("B", 2));
a1.Add(new KeyValuePair<string, int>("C", 3));
a1.Add(new KeyValuePair<string, int>("D", 4));
a2.Add(new KeyValuePair<string, int>("B", 2));
a2.Add(new KeyValuePair<string, int>("E", 5));
a2.Add(new KeyValuePair<string, int>("C", 33));
var distinct = a1.Union(a2).Distinct();
foreach(var kv in distinct)
{
Console.WriteLine($"{kv.Key}={kv.Value}");
}
}
Будет напечатан следующий результат:
A=1
B=2
C=3
D=4
E=5
C=33