まず、私はジェネリックに慣れていないので、間違いがあることをあらかじめお詫びします。
さまざまな種類の辞書を統一的に比較できるようにしたいと考えています。このタイプを持つ可能性のある 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 パラメーターを渡す方法がわかりません。
ご提案ありがとうございます