dotnet/reactive · error · ArgumentNullException

Value cannot be null. (Parameter 'seventh')

Error message

Value cannot be null. (Parameter 'seventh')

What it means

ArgumentNullException with message "Value cannot be null. (Parameter 'seventh')" is thrown by the 10-source CombineLatest overload when the seventh source sequence is null. This follows the same eager-validation contract as the other guards: every source argument is checked before the query expression tree is built via first.Provider.CreateQuery.

Solutions

  1. Ensure the seventh source is a valid IObservable<TSeventh>; coalesce with Observable.Empty<TSeventh>() if it may be absent.
  2. Fix the configuration or initialization that leaves the seventh source null.
  3. If the source is optional, drop it and use a lower-arity CombineLatest overload.

Example fix

// before
var combined = first.CombineLatest(second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth);
// after
var combined = first.CombineLatest(second, third, fourth, fifth, sixth, seventh ?? Observable.Empty<TSeventh>(), eighth, ninth, tenth);
Defensive patterns

Strategy: validation

Validate before calling

if (seventh is null) throw new InvalidOperationException("seventh source must be a non-null IObservable<TSeventh>");
// or: seventh ??= Observable.Empty<TSeventh>();

Type guard

static bool IsValidSource<T>(IObservable<T>? source) => source is not null;

Try / catch

try
{
    var combined = first.CombineLatest(second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth);
}
catch (ArgumentNullException ex) when (ex.ParamName == "seventh")
{
    // handle missing seventh source
}

Prevention

When it happens

Trigger: Calling QbservableEx.CombineLatest with seventh == null; the guard at QbservableEx.Homoicon.cs:419-420 fires once the first six sources validate.

Common situations: Combining many streams (e.g. dashboard indicators) where the seventh source depends on configuration that is missing; null results from conditional stream resolution; uninitialized members after a refactor.

Related errors


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

Appendix: source

Thrown at Rx.NET/Source/src/System.Reactive/Linq/QbservableEx.Homoicon.cs:419

        /// <returns>An observable sequence containing the result of combining elements of the sources using tuple values.</returns>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="first" /> or <paramref name="second" /> or <paramref name="third" /> or <paramref name="fourth" /> or <paramref name="fifth" /> or <paramref name="sixth" /> or <paramref name="seventh" /> or <paramref name="eighth" /> or <paramref name="ninth" /> or <paramref name="tenth" /> is null.</exception>
        public static IQbservable<(TFirst First, TSecond Second, TThird Third, TFourth Fourth, TFifth Fifth, TSixth Sixth, TSeventh Seventh, TEighth Eighth, TNinth Ninth, TTenth Tenth)> CombineLatest<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TSeventh, TEighth, TNinth, TTenth>(this IQbservable<TFirst> first, IObservable<TSecond> second, IObservable<TThird> third, IObservable<TFourth> fourth, IObservable<TFifth> fifth, IObservable<TSixth> sixth, IObservable<TSeventh> seventh, IObservable<TEighth> eighth, IObservable<TNinth> ninth, IObservable<TTenth> tenth)
        {
            if (first == null)
                throw new ArgumentNullException(nameof(first));
            if (second == null)
                throw new ArgumentNullException(nameof(second));
            if (third == null)
                throw new ArgumentNullException(nameof(third));
            if (fourth == null)
                throw new ArgumentNullException(nameof(fourth));
            if (fifth == null)
                throw new ArgumentNullException(nameof(fifth));
            if (sixth == null)
                throw new ArgumentNullException(nameof(sixth));
            if (seventh == null)
                throw new ArgumentNullException(nameof(seventh));
            if (eighth == null)
                throw new ArgumentNullException(nameof(eighth));
            if (ninth == null)
                throw new ArgumentNullException(nameof(ninth));
            if (tenth == null)
                throw new ArgumentNullException(nameof(tenth));

            return first.Provider.CreateQuery<(TFirst First, TSecond Second, TThird Third, TFourth Fourth, TFifth Fifth, TSixth Sixth, TSeventh Seventh, TEighth Eighth, TNinth Ninth, TTenth Tenth)>(
                Expression.Call(
                    null,
                    new Func<IQbservable<TFirst>, IObservable<TSecond>, IObservable<TThird>, IObservable<TFourth>, IObservable<TFifth>, IObservable<TSixth>, IObservable<TSeventh>, IObservable<TEighth>, IObservable<TNinth>, IObservable<TTenth>, IQbservable<(TFirst First, TSecond Second, TThird Third, TFourth Fourth, TFifth Fifth, TSixth Sixth, TSeventh Seventh, TEighth Eighth, TNinth Ninth, TTenth Tenth)>>(CombineLatest<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TSeventh, TEighth, TNinth, TTenth>).Method,
                    first.Expression,
                    GetSourceExpression(second),
                    GetSourceExpression(third),
                    GetSourceExpression(fourth),
                    GetSourceExpression(fifth),
                    GetSourceExpression(sixth),
                    GetSourceExpression(seventh),

View on GitHub (pinned to 94b5d5ab91)