{"record":{"id":"600296910ab4a52f","repo":"dotnet/reactive","slug":"value-cannot-be-null-parameter-seventh-observable-multiple","errorCode":null,"errorMessage":"Value cannot be null. (Parameter 'seventh')","messagePattern":"Value cannot be null\\. \\(Parameter 'seventh'\\)","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"Rx.NET/Source/src/System.Reactive/Linq/Observable.Multiple.Zip.cs","lineNumber":1355,"sourceCode":"        /// <param name=\"seventh\">Seventh observable source.</param>\n        /// <returns>An observable sequence containing the result of combining elements of the sources using tuple values.</returns>\n        /// <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\"/> is null.</exception>\n        public static IObservable<(TFirst First, TSecond Second, TThird Third, TFourth Fourth, TFifth Fifth, TSixth Sixth, TSeventh Seventh)> Zip<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TSeventh>(this IObservable<TFirst> first, IObservable<TSecond> second, IObservable<TThird> third, IObservable<TFourth> fourth, IObservable<TFifth> fifth, IObservable<TSixth> sixth, IObservable<TSeventh> seventh)\n        {\n            if (first == null)\n                throw new ArgumentNullException(nameof(first));\n            if (second == null)\n                throw new ArgumentNullException(nameof(second));\n            if (third == null)\n                throw new ArgumentNullException(nameof(third));\n            if (fourth == null)\n                throw new ArgumentNullException(nameof(fourth));\n            if (fifth == null)\n                throw new ArgumentNullException(nameof(fifth));\n            if (sixth == null)\n                throw new ArgumentNullException(nameof(sixth));\n            if (seventh == null)\n                throw new ArgumentNullException(nameof(seventh));\n\n            return s_impl.Zip(first, second, third, fourth, fifth, sixth, seventh);\n        }\n\n        /// <summary>\n        /// Merges the specified observable sequences into one observable sequence of tuple values whenever all of the observable sequences have produced an element at a corresponding index.\n        /// </summary>\n        /// <typeparam name=\"TFirst\">The type of the elements in the first source sequence.</typeparam>\n        /// <typeparam name=\"TSecond\">The type of the elements in the second source sequence.</typeparam>\n        /// <typeparam name=\"TThird\">The type of the elements in the third source sequence.</typeparam>\n        /// <typeparam name=\"TFourth\">The type of the elements in the fourth source sequence.</typeparam>\n        /// <typeparam name=\"TFifth\">The type of the elements in the fifth source sequence.</typeparam>\n        /// <typeparam name=\"TSixth\">The type of the elements in the sixth source sequence.</typeparam>\n        /// <typeparam name=\"TSeventh\">The type of the elements in the seventh source sequence.</typeparam>\n        /// <typeparam name=\"TEighth\">The type of the elements in the eighth source sequence.</typeparam>\n        /// <param name=\"first\">First observable source.</param>\n        /// <param name=\"second\">Second observable source.</param>\n        /// <param name=\"third\">Third observable source.</param>","sourceCodeStart":1337,"sourceCodeEnd":1373,"githubUrl":"https://github.com/dotnet/reactive/blob/94b5d5ab912789f5abe9a72138a25bbd716fe59c/Rx.NET/Source/src/System.Reactive/Linq/Observable.Multiple.Zip.cs#L1337-L1373","documentation":"The 7-source Zip overload completes its parameter validation by throwing ArgumentNullException if the seventh observable sequence is null. The exception is raised in the public Zip method before the query is handed to the internal implementation.","triggerScenarios":"Calling the 7-tuple Observable.Zip overload (line 1355) with seventh == null; all six preceding null checks passed.","commonSituations":"The seventh stream comes from an optional dependency (e.g. an analytics provider that is disabled) and its factory returned null; the caller assumed a sequence was always available.","solutions":["Return Observable.Empty<TSeventh>() from the factory instead of null when the source is disabled.","Fix the initialization of the seventh source so it is created before the Zip call.","Guard with a null check and fall back to a 6-way Zip overload when the seventh source is absent.","Ensure DI/feature-flag configuration guarantees the seventh stream is registered when this query path runs."],"exampleFix":"// before\nvar zipped = a.Zip(b, c, d, e, f, analytics?.Events);\n// after\nvar zipped = a.Zip(b, c, d, e, f, analytics?.Events ?? Observable.Empty<TSeventh>());","handlingStrategy":"validation","validationCode":"var events = analytics?.Events ?? Observable.Empty<TSeventh>();","typeGuard":"static bool AnalyticsReady(IObservable<TSeventh>? s) => s is not null;","tryCatchPattern":"try { var zipped = a.Zip(b, c, d, e, f, analytics?.Events); }\ncatch (ArgumentNullException ex) when (ex.ParamName == \"seventh\") { /* disable analytics path or supply empty source */ }","preventionTips":["Make optional provider integrations return empty observables instead of null.","Null-check optional dependencies at the point of use.","Compose queries only after confirming all integrations are initialized."],"tags":["csharp","rx","null-argument","argument-validation"],"backgroundTag":"null-argument","analyzedSha":"94b5d5ab912789f5abe9a72138a25bbd716fe59c","analyzedAt":"2026-09-15T02:26:24.759Z","contentChangedAt":"2026-09-15T02:26:24.759Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}