/// <summary> /// Creates a key comparer. /// </summary> /// <typeparam name="T">The type of object being compared.</typeparam> /// <typeparam name="TKey">The type of key objects being compared.</typeparam> /// <param name="this">The equality comparer builder.</param> /// <param name="selector">The key selector. May not be <c>null</c>.</param> /// <param name="comparerFactory">The definition of the key comparer. May not be <c>null</c>.</param> /// <param name="specialNullHandling">A value indicating whether <c>null</c> values are passed to <paramref name="selector"/>. If <c>false</c>, then <c>null</c> values are considered less than any non-<c>null</c> values and are not passed to <paramref name="selector"/>. This value is ignored if <typeparamref name="T"/> is a non-nullable type.</param> /// <returns>A key comparer.</returns> public static IFullEqualityComparer <T> EquateBy <T, TKey>(this EqualityComparerBuilderFor <T> @this, Func <T, TKey> selector, Func <EqualityComparerBuilderFor <TKey>, IEqualityComparer <TKey> > comparerFactory, bool specialNullHandling = false) { _ = comparerFactory ?? throw new ArgumentNullException(nameof(comparerFactory)); var comparer = comparerFactory(EqualityComparerBuilder.For <TKey>()); return(@this.EquateBy(selector, comparer, specialNullHandling)); }
/// <summary> /// Creates a key comparer. /// </summary> /// <typeparam name="T">The type of object being compared.</typeparam> /// <typeparam name="TKey">The type of key objects being compared.</typeparam> /// <param name="this">The equality comparer builder.</param> /// <param name="selector">The key selector. May not be <c>null</c>.</param> /// <param name="comparerFactory">The definition of the key comparer. May not be <c>null</c>.</param> /// <param name="specialNullHandling">A value indicating whether <c>null</c> values are passed to <paramref name="selector"/>. If <c>false</c>, then <c>null</c> values are considered less than any non-<c>null</c> values and are not passed to <paramref name="selector"/>. This value is ignored if <typeparamref name="T"/> is a non-nullable type.</param> /// <returns>A key comparer.</returns> public static IFullEqualityComparer <T> EquateBy <T, TKey>(this EqualityComparerBuilderFor <T> @this, Func <T, TKey> selector, Func <EqualityComparerBuilderFor <TKey>, IEqualityComparer <TKey> > comparerFactory, bool specialNullHandling = false) { var comparer = comparerFactory(EqualityComparerBuilder.For <TKey>()); return(@this.EquateBy(selector, comparer, specialNullHandling)); }