您可以尝试使用“TryGetValue”方法(
点此查看):
using System.Linq
...
var dictExcept = dict1
.Where(pair => dict2.TryGetValue(pair.Key, out var value) &&
pair.Value != value)
.ToDictionary(pair => pair.Key,
pair => (first: pair.Value, second: dict2[pair.Key]))
在这里,我们针对来自dict1
的每个键值对,尝试从dict2
中获取相应的value
:
// dict2 has pair.Key it corresponds to value...
dict2.TryGetValue(pair.Key, out var value) &&
// however value from dict2 != value from dict1
pair.Value != value
如果您喜欢使用foreach
(没有Linq解决方案),可以采用同样的想法:
var dictExcept = new Dictionary<string, (string first, string second)>();
foreach (var pair in dict1)
if (dict2.TryGetValue(pair.Key, out var value) && value != pair.Value)
dictExcept.Add(pair.Key, (pair.Value, value));
Demo: (fiddle)
var dict1 = new Dictionary<string, string> {
{ "a", "False" }, { "b", "False" }, { "c", "True" }, { "d", "dict1 only" } };
var dict2 = new Dictionary<string, string> {
{ "a", "False" }, { "b", "True" }, { "c", "False" }, { "e", "dict2 only" } };
var dictExcept = dict1
.Where(pair => dict2.TryGetValue(pair.Key, out var value) &&
pair.Value != value)
.ToDictionary(pair => pair.Key,
pair => (first: pair.Value, second: dict2[pair.Key]));
string report = string.Join(Environment.NewLine, dictExcept
.Select(pair => $"Key: {pair.Key}; Values: {pair.Value}"));
Console.Write(report);
结果:
Key: b; Values: (False, True)
Key: c; Values: (True, False)
if(dict1[key] != dict2[key]) keyList.Add(key);
。假设两个字典中的键都是字符串类型,keyList是一个List<string>
。 - Chetan