If you’ve already checked that the keys are the same, you can just use:
var dict3 = dict2.Where(entry => dict1[entry.Key] != entry.Value)
.ToDictionary(entry => entry.Key, entry => entry.Value);
To explain, this will:
- Iterate over the key/value pairs in
dict2 - For each entry, look up the value in
dict1and filter out any entries where the two values are the same - Form a dictionary from the remaining entries (i.e. the ones where the
dict1value is different) by taking the key and value from each pair just as they appear indict2.
Note that this avoids relying on the equality of KeyValuePair<TKey, TValue> – it might be okay to rely on that, but personally I find this clearer. (It will also work when you’re using a custom equality comparer for the dictionary keys – although you’d need to pass that to ToDictionary, too.)