dotnet/reactive · error · ArgumentNullException
Value cannot be null. (Parameter 'sixth')
Error message
Value cannot be null. (Parameter 'sixth')
What it means
ArgumentNullException with message "Value cannot be null. (Parameter 'sixth')" is thrown by the 10-source CombineLatest overload when the sixth source sequence is null. Rx operators validate inputs eagerly; a null source would produce an invalid expression tree when CombineLatest attempts first.Provider.CreateQuery, so the null check at QbservableEx.Homoicon.cs:417-418 throws immediately.
Solutions
- Pass a real IObservable<TSixth>; substitute Observable.Empty<TSixth>() or Observable.Never<TSixth>() when the stream is optional.
- Fix the producer or composition code that yields a null sixth source.
- Reduce arity: use an overload with fewer sources rather than padding with null.
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 ?? Observable.Empty<TSixth>(), seventh, eighth, ninth, tenth);
Defensive patterns
Strategy: validation
Validate before calling
if (sixth is null) throw new InvalidOperationException("sixth source must be a non-null IObservable<TSixth>");
// or: sixth ??= Observable.Empty<TSixth>(); 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 == "sixth")
{
// handle missing sixth source
} Prevention
- When assembling source lists programmatically, filter out or replace null elements before composing.
- Coalesce optional sources with ?? Observable.Empty<T>().
- Fix producers that return null instead of throwing a meaningful error.
When it happens
Trigger: Calling QbservableEx.CombineLatest with sixth == null; the guard executes after sources one through five pass validation.
Common situations: Dynamically composed stream lists where one element is null; a service or repository returning null instead of an observable; incorrect merge logic building the argument list programmatically.
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 'seventh')
- Value cannot be null. (Parameter 'eighth')
AI-assisted analysis of dotnet/reactive@94b5d5ab91 (2026-09-15).
Data as JSON: /api/errors/e7eb5a73c59f4d00.
Report an issue: GitHub.
Appendix: source
Thrown at Rx.NET/Source/src/System.Reactive/Linq/QbservableEx.Homoicon.cs:417
/// <param name="ninth">Ninth observable source.</param>
/// <param name="tenth">Tenth observable source.</param>
/// <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),View on GitHub (pinned to 94b5d5ab91)