File: src\Microsoft.Private.Windows.Polyfills\Exceptions\ArgumentOutOfRangeExtensions.cs
Web Access
Project: src\src\System.Private.Windows.Core\src\Microsoft.Private.Windows.Core.csproj (Microsoft.Private.Windows.Core)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Microsoft.Private.Windows.Polyfills.Resources;
 
namespace System;
 
internal static class ArgumentOutOfRangeExtensions
{
    extension(ArgumentOutOfRangeException)
    {
        /// <summary>Throws an <see cref="ArgumentOutOfRangeException"/> if <paramref name="value"/> is negative.</summary>
        /// <param name="value">The argument to validate as non-negative.</param>
        /// <param name="paramName">The name of the parameter with which <paramref name="value"/> corresponds.</param>
        public static void ThrowIfNegative(int value, [CallerArgumentExpression(nameof(value))] string? paramName = null)
        {
            if (value < 0)
            {
                ThrowNegative(value, paramName);
            }
        }
 
        /// <summary>Throws an <see cref="ArgumentOutOfRangeException"/> if <paramref name="value"/> is less than <paramref name="other"/>.</summary>
        /// <param name="value">The argument to validate as greater than or equal than <paramref name="other"/>.</param>
        /// <param name="other">The value to compare with <paramref name="value"/>.</param>
        /// <param name="paramName">The name of the parameter with which <paramref name="value"/> corresponds.</param>
        public static void ThrowIfLessThan<T>(T value, T other, [CallerArgumentExpression(nameof(value))] string? paramName = null)
            where T : IComparable<T>
        {
            if (value.CompareTo(other) < 0)
                ThrowLess(value, other, paramName);
        }
    }
 
#pragma warning disable IDE0051 // Remove unused private members
    // .NET Framework analyzers don't understand that these methods are only called from the extension methods above,
    // so it thinks it's unused. Suppress that warning since these methods are actually used.
 
    [DoesNotReturn]
    private static void ThrowNegative<T>(T value, string? paramName) =>
        throw new ArgumentOutOfRangeException(
            paramName,
            value,
            string.Format(SRF.ArgumentOutOfRange_Generic_MustBeNonNegative, paramName, value));
 
    [DoesNotReturn]
    private static void ThrowLess<T>(T value, T other, string? paramName) =>
    throw new ArgumentOutOfRangeException(
        paramName,
        value,
        string.Format(SRF.ArgumentOutOfRange_Generic_MustBeGreaterOrEqual, paramName, value, other));
 
#pragma warning restore IDE0051 // Remove unused private members
 
}