dotnet/reactive · error · ArgumentNullException

Value cannot be null. (Parameter 'repeatCount')

Error message

Value cannot be null. (Parameter 'repeatCount')

What it means

This Repeat(value, repeatCount) overload repeats a value a fixed number of times. Note the source guard checks repeatCount < 0 but throws ArgumentNullException naming 'repeatCount' — so this error fires when a negative count is passed (a likely copy-paste bug; ArgumentOutOfRangeException would be the expected type).

Solutions

  1. Pass a repeatCount >= 0 (use 0 for no repetitions)
  2. Clamp negative computed counts before the call, e.g. Math.Max(0, count)
  3. Fix the upstream computation that produced a negative count

Example fix

// before
var obs = AsyncObservable.Repeat(42, count); // count may be -1
// after
var obs = AsyncObservable.Repeat(42, Math.Max(0, count));
Defensive patterns

Strategy: validation

Validate before calling

if (repeatCount < 0) throw new ArgumentOutOfRangeException(nameof(repeatCount), repeatCount, "Must be >= 0");
var obs = AsyncObservable.Repeat(value, repeatCount);

Type guard

static bool IsValidRepeatCount(int n) => n >= 0;

Try / catch

try
{
    var obs = AsyncObservable.Repeat(value, repeatCount);
}
catch (ArgumentNullException ex) when (ex.ParamName == "repeatCount")
{
    var obs = AsyncObservable.Repeat(value, 0); // or clamp and retry
}

Prevention

When it happens

Trigger: Calling AsyncObservable.Repeat(value, repeatCount) with repeatCount < 0, e.g. a count computed from a negative constant, a failed parse defaulting to -1, or a subtraction that went below zero.

Common situations: Computing repeat counts from user input or config that yields -1 as a sentinel; off-by-one arithmetic producing negative values; passing int.Parse failures' sentinel values.

Related errors


AI-assisted analysis of dotnet/reactive@94b5d5ab91 (2026-09-15). Data as JSON: /api/errors/7d6ff5dcfb550cb9. Report an issue: GitHub.

Appendix: source

Thrown at AsyncRx.NET/System.Reactive.Async/Linq/Operators/Repeat.cs:31

    public partial class AsyncObservable
    {
        public static IAsyncObservable<TSource> Repeat<TSource>(TSource value)
        {
            return Create<TSource>(observer => AsyncObserver.Repeat(observer, value));
        }

        public static IAsyncObservable<TSource> Repeat<TSource>(TSource value, IAsyncScheduler scheduler)
        {
            if (scheduler == null)
                throw new ArgumentNullException(nameof(scheduler));

            return Create<TSource>(observer => AsyncObserver.Repeat(observer, value, scheduler));
        }

        public static IAsyncObservable<TSource> Repeat<TSource>(TSource value, int repeatCount)
        {
            if (repeatCount < 0)
                throw new ArgumentNullException(nameof(repeatCount));

            return Create<TSource>(observer => AsyncObserver.Repeat(observer, value, repeatCount));
        }

        public static IAsyncObservable<TSource> Repeat<TSource>(TSource value, int repeatCount, IAsyncScheduler scheduler)
        {
            if (repeatCount < 0)
                throw new ArgumentNullException(nameof(repeatCount));
            if (scheduler == null)
                throw new ArgumentNullException(nameof(scheduler));

            return Create<TSource>(observer => AsyncObserver.Repeat(observer, value, repeatCount, scheduler));
        }

        public static IAsyncObservable<TSource> Repeat<TSource>(this IAsyncObservable<TSource> source)
        {
            if (source == null)
                throw new ArgumentNullException(nameof(source));

View on GitHub (pinned to 94b5d5ab91)