private static bool EnumerableEquals( object x, object y, MemberSettings settings, ReferencePairCollection referencePairs) { if (ListEqualByComparer.TryGetOrCreate(x, y, out var comparer) || ReadOnlyListEqualByComparer.TryGetOrCreate(x, y, out comparer) || SetEqualByComparer.TryGetOrCreate(x, y, out comparer) || ArrayEqualByComparer.TryGetOrCreate(x, y, out comparer) || DictionaryEqualByComparer.TryGetOrCreate(x, y, out comparer) || ReadOnlyDictionaryEqualByComparer.TryGetOrCreate(x, y, out comparer) || EnumerableEqualByComparer.TryGetOrCreate(x, y, out comparer)) { return(comparer.Equals(x, y, settings, referencePairs)); } throw Throw.ShouldNeverGetHereException($"Could not compare enumerables of type {x.GetType().PrettyName()}"); }
private static bool EnumerableEquals( object x, object y, MemberSettings settings, ReferencePairCollection referencePairs) { EqualByComparer comparer; if (ListEqualByComparer.TryGetOrCreate(x, y, out comparer) || ReadOnlyListEqualByComparer.TryGetOrCreate(x, y, out comparer) || SetEqualByComparer.TryGetOrCreate(x, y, out comparer) || ArrayEqualByComparer.TryGetOrCreate(x, y, out comparer) || DictionaryEqualByComparer.TryGetOrCreate(x, y, out comparer) || ReadOnlyDictionaryEqualByComparer.TryGetOrCreate(x, y, out comparer) || EnumerableEqualByComparer.TryGetOrCreate(x, y, out comparer)) { return comparer.Equals(x, y, settings, referencePairs); } throw Throw.ShouldNeverGetHereException($"Could not compare enumerables of type {x.GetType().PrettyName()}"); }
/// <summary> /// Compare <paramref name="x"/> with <paramref name="y"/> /// </summary> /// <param name="x">The x value.</param> /// <param name="y">The y value.</param> /// <param name="settings">The settings that specifies how comparison is performed.</param> /// <param name="referencePairs"> /// The already compared items. This is used to stop infinite recursion when there are reference loops. /// </param> /// <returns>True if <paramref name="x"/> and <paramref name="y"/> are equal.</returns> public abstract bool Equals( object x, object y, MemberSettings settings, ReferencePairCollection referencePairs);