DictionariesComparer
Comparator for two IDictionarys.
using System.Collections;
using System.Runtime.CompilerServices;
namespace NUnit.Framework.Constraints.Comparers
{
internal static class DictionariesComparer
{
[NullableContext(1)]
public static EqualMethodResult Equal(object x, object y, ref Tolerance tolerance, ComparisonState state, NUnitEqualityComparer equalityComparer)
{
IDictionary dictionary = x as IDictionary;
if (dictionary != null) {
IDictionary dictionary2 = y as IDictionary;
if (dictionary2 != null) {
if (dictionary.Count != dictionary2.Count)
return EqualMethodResult.ComparedNotEqual;
CollectionTally collectionTally = new CollectionTally(equalityComparer, dictionary.Keys);
collectionTally.TryRemove(dictionary2.Keys);
if (collectionTally.Result.MissingItems.Count > 0 || collectionTally.Result.ExtraItems.Count > 0)
return EqualMethodResult.ComparedNotEqual;
ComparisonState state2 = state.PushComparison(x, y);
foreach (object key in dictionary.Keys) {
EqualMethodResult equalMethodResult = equalityComparer.AreEqual(dictionary[key], dictionary2[key], ref tolerance, state2);
if (equalMethodResult != EqualMethodResult.ComparedEqual)
return equalMethodResult;
}
return EqualMethodResult.ComparedEqual;
}
}
return EqualMethodResult.TypesNotSupported;
}
}
}