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
- Ensure the seventh source is a valid IObservable<TSeventh>; coalesce with Observable.Empty<TSeventh>() if it may be absent.
- Fix the configuration or initialization that leaves the seventh source null.
- 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
- Ensure configuration-dependent streams are created with a fallback (Empty) when config is missing.
- Coalesce optional sources with ?? Observable.Empty<T>().
- Use nullable reference types and address compiler nullability warnings.
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
- Value cannot be null. (Parameter 'third')
- Value cannot be null. (Parameter 'fourth')
- Value cannot be null. (Parameter 'fifth')
- Value cannot be null. (Parameter 'sixth')
- Value cannot be null. (Parameter 'eighth')
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)