{"record":{"id":"931fd5ab7d60a571","repo":"dotnet/reactive","slug":"fourteenth","errorCode":null,"errorMessage":"fourteenth","messagePattern":"fourteenth","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"Rx.NET/Source/src/System.Reactive/Linq/QbservableEx.Homoicon.cs","lineNumber":2198,"sourceCode":"                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            if (eighth == null)\n                throw new ArgumentNullException(nameof(eighth));\n            if (ninth == null)\n                throw new ArgumentNullException(nameof(ninth));\n            if (tenth == null)\n                throw new ArgumentNullException(nameof(tenth));\n            if (eleventh == null)\n                throw new ArgumentNullException(nameof(eleventh));\n            if (twelfth == null)\n                throw new ArgumentNullException(nameof(twelfth));\n            if (thirteenth == null)\n                throw new ArgumentNullException(nameof(thirteenth));\n            if (fourteenth == null)\n                throw new ArgumentNullException(nameof(fourteenth));\n            if (fifteenth == null)\n                throw new ArgumentNullException(nameof(fifteenth));\n            if (sixteenth == null)\n                throw new ArgumentNullException(nameof(sixteenth));\n\n            return first.Provider.CreateQuery<(TFirst First, TSecond Second, TThird Third, TFourth Fourth, TFifth Fifth, TSixth Sixth, TSeventh Seventh, TEighth Eighth, TNinth Ninth, TTenth Tenth, TEleventh Eleventh, TTwelfth Twelfth, TThirteenth Thirteenth, TFourteenth Fourteenth, TFifteenth Fifteenth, TSixteenth Sixteenth)>(\n                Expression.Call(\n                    null,\n                    new Func<IQbservable<TFirst>, IObservable<TSecond>, IObservable<TThird>, IObservable<TFourth>, IObservable<TFifth>, IObservable<TSixth>, IObservable<TSeventh>, IObservable<TEighth>, IObservable<TNinth>, IObservable<TTenth>, IObservable<TEleventh>, IObservable<TTwelfth>, IObservable<TThirteenth>, IObservable<TFourteenth>, IObservable<TFifteenth>, IObservable<TSixteenth>, IQbservable<(TFirst First, TSecond Second, TThird Third, TFourth Fourth, TFifth Fifth, TSixth Sixth, TSeventh Seventh, TEighth Eighth, TNinth Ninth, TTenth Tenth, TEleventh Eleventh, TTwelfth Twelfth, TThirteenth Thirteenth, TFourteenth Fourteenth, TFifteenth Fifteenth, TSixteenth Sixteenth)>>(Zip<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TSeventh, TEighth, TNinth, TTenth, TEleventh, TTwelfth, TThirteenth, TFourteenth, TFifteenth, TSixteenth>).Method,\n                    first.Expression,\n                    GetSourceExpression(second),\n                    GetSourceExpression(third),\n                    GetSourceExpression(fourth),\n                    GetSourceExpression(fifth),\n                    GetSourceExpression(sixth),\n                    GetSourceExpression(seventh),\n                    GetSourceExpression(eighth),\n                    GetSourceExpression(ninth),","sourceCodeStart":2180,"sourceCodeEnd":2216,"githubUrl":"https://github.com/dotnet/reactive/blob/94b5d5ab912789f5abe9a72138a25bbd716fe59c/Rx.NET/Source/src/System.Reactive/Linq/QbservableEx.Homoicon.cs#L2180-L2216","documentation":"The 16-argument overload of QbservableEx.Zip throws ArgumentNullException because the parameter 'fourteenth' (the fourteenth source observable sequence) was null. Rx operators validate all sequence arguments eagerly before building the query expression tree, so a null source fails immediately on the client rather than on the provider.","triggerScenarios":"Calling the 16-way Zip overload of IQbservable with the fourteenth argument (an IObservable<TFourteenth> source) set to null, e.g. passing an uninitialized field or the result of a lookup that returned null.","commonSituations":"Chaining many 16 observable streams in a WPF/Silverlight data-binding scenario where one stream comes from a service that returned null instead of an empty sequence; refactoring that removed a stream assignment; using a dictionary of streams where one key is missing.","solutions":["Initialize the fourteenth observable before calling Zip (e.g. Observable.Empty<TFourteenth>() or a real source)","Check each of the 16 arguments for null before invoking Zip","Trace which stream factory returned null and fix it at the source"],"exampleFix":"// before\nvar q = first.Zip(s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16); // s14 null\n// after\nIObservable<TFourteenth> s14 = GetFourteenth() ?? Observable.Empty<TFourteenth>();\nvar q = first.Zip(s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16);","handlingStrategy":"validation","validationCode":"if (first == null || second == null || ... || sixteenth == null) throw new ArgumentException(\"All Zip sources must be non-null\");","typeGuard":"static bool AllNonNull<T>(params object[] sources) => sources.All(s => s != null);","tryCatchPattern":"try { var q = first.Zip(...s16); } catch (ArgumentNullException ex) { Console.Error.WriteLine($\"Zip source missing: {ex.ParamName}\"); }","preventionTips":["Replace null sources with Observable.Empty<T>() at stream-creation time","Validate all sequence arguments in a helper before composing large Zip calls","Keep argument lists short; combine streams in stages instead of 16 at once"],"tags":["null-argument","rx","qbservable","zip"],"backgroundTag":"null-argument","analyzedSha":"94b5d5ab912789f5abe9a72138a25bbd716fe59c","analyzedAt":"2026-09-15T02:26:24.759Z","contentChangedAt":"2026-09-15T02:26:24.759Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}