首先,我是泛型的新手,所以我提前为任何错误道歉。
我希望能够以统一的方式比较不同类型的词典。我要比较 2 个可能具有这种类型的字典(为了清楚起见,我想比较 2 个具有相同类型的不同字典):
Dictionary<string, Int32>
Dictionary<Int32, Int32>
Dictionary<string, string>
Dictionary<string, List<Int32>>
Dictionary<Int32, List<Int32>>
Dictionary<Int32, List<ComplexObject>>
使用泛型,我得到了这段代码:
private static bool DictionaryEquals<TKey, TValue>(Dictionary<TKey, TValue> left, Dictionary<TKey, TValue> right)
{
var comp = EqualityComparer<TValue>.Default;
if (left.Count != right.Count)
{
return false;
}
foreach (var pair in left)
{
TValue value;
if ((typeof(TValue).Namespace == "System.Collections.Generic"))
{
TValue rightValue;
right.TryGetValue(pair.Key, out rightValue);
return ListEquals<TValue>(new List<TValue>(pair.Key), rightValue);
}
if (right.TryGetValue(pair.Key, out value) || (!comp.Equals(pair.Value, value)))
{
return false;
}
}
return true;
}
private static bool ListEquals<TValue>(List<TValue> left, List<TValue> right)
{
if (left.Count != right.Count)
{
return false;
}
return left.All(right.Contains);
}
我在调用 ListEquals 方法时遇到问题,我不知道如何传入 pair.key 和 rightValue 参数。
感谢您的任何建议