Example #1
0
        public static void Assert <T>(this T? @this, string name, T?value, IEqualityComparer <T> comparer, [CallerMemberName] string?caller = null)
        {
            name.AssertNotBlank(nameof(name));
            comparer.AssertNotNull(nameof(comparer));

            if (!comparer.Equals(@this, value))
            {
                throw new ArgumentOutOfRangeException($"{caller} -> {nameof(Assert)}: {(@this is not null ? $"[{@this}]" : "null")} <> {(value is not null ? $"[{value}]" : "null")}.", name);
            }
        }
        /// <remarks>Throws <see cref="ArgumentNullException"/>.</remarks>
        public static async ValueTask <bool> HasAsync <T>([NotNullWhen(true)] this IAsyncEnumerable <T>? @this, IAsyncEnumerable <T>?values, IEqualityComparer <T> comparer)
        {
            comparer.AssertNotNull(nameof(comparer));

            if (@this is null)
            {
                return(false);
            }

            if (values is null)
            {
                return(true);
            }

            await foreach (var value in values)
            {
                if (!await @this.HasAsync(value, comparer))
                {
                    return(false);
                }
            }

            return(true);
        }
        /// <summary>
        /// <c>await @<paramref name="this"/>.IfAsync(_ =&gt; <paramref name="comparer"/>.Equals(_, <paramref name="value"/>)).AnyAsync()</c>
        /// </summary>
        /// <remarks>Throws <see cref="ArgumentNullException"/>.</remarks>
        public static async ValueTask <bool> HasAsync <T>([NotNullWhen(true)] this IAsyncEnumerable <T>? @this, T value, IEqualityComparer <T> comparer)
        {
            comparer.AssertNotNull(nameof(comparer));

            return(await @this.IfAsync(_ => comparer.Equals(_, value)).AnyAsync());
        }