{"record":{"id":"cad9d7803642d834","repo":"dotnet/reactive","slug":"argumentnullexception-default-message-value-cannot-be-null-cad9d7","errorCode":null,"errorMessage":"ArgumentNullException (default message: Value cannot be null. (Parameter 'scheduler'))","messagePattern":"ArgumentNullException \\(default message: Value cannot be null\\. \\(Parameter 'scheduler'\\)\\)","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"Rx.NET/Source/src/System.Reactive/Linq/Observable.Single.cs","lineNumber":844,"sourceCode":"        /// <summary>\n        /// Prepends a sequence of values to an observable sequence.\n        /// </summary>\n        /// <typeparam name=\"TSource\">The type of the elements in the source sequence.</typeparam>\n        /// <param name=\"source\">Source sequence to prepend values to.</param>\n        /// <param name=\"scheduler\">Scheduler to emit the prepended values on.</param>\n        /// <param name=\"values\">Values to prepend to the specified sequence.</param>\n        /// <returns>The source sequence prepended with the specified values.</returns>\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"source\"/> or <paramref name=\"scheduler\"/> or <paramref name=\"values\"/> is null.</exception>\n        public static IObservable<TSource> StartWith<TSource>(this IObservable<TSource> source, IScheduler scheduler, params TSource[] values)\n        {\n            if (source == null)\n            {\n                throw new ArgumentNullException(nameof(source));\n            }\n\n            if (scheduler == null)\n            {\n                throw new ArgumentNullException(nameof(scheduler));\n            }\n\n            if (values == null)\n            {\n                throw new ArgumentNullException(nameof(values));\n            }\n\n            return s_impl.StartWith(source, scheduler, values);\n        }\n\n        /// <summary>\n        /// Prepends a sequence of values to an observable sequence.\n        /// </summary>\n        /// <typeparam name=\"TSource\">The type of the elements in the source sequence.</typeparam>\n        /// <param name=\"source\">Source sequence to prepend values to.</param>\n        /// <param name=\"scheduler\">Scheduler to emit the prepended values on.</param>\n        /// <param name=\"values\">Values to prepend to the specified sequence.</param>\n        /// <returns>The source sequence prepended with the specified values.</returns>","sourceCodeStart":826,"sourceCodeEnd":862,"githubUrl":"https://github.com/dotnet/reactive/blob/94b5d5ab912789f5abe9a72138a25bbd716fe59c/Rx.NET/Source/src/System.Reactive/Linq/Observable.Single.cs#L826-L862","documentation":"In the scheduler-based StartWith overload, the IScheduler argument must be non-null because it is used to emit the prepended values. A null scheduler throws ArgumentNullException with parameter name 'scheduler' immediately at the call site. Rx.NET validates this before any subscription occurs.","triggerScenarios":"Calling source.StartWith(null, values) where the IScheduler parameter is null.","commonSituations":"Uninjected scheduler dependency (DI container not registering IScheduler), a cached scheduler property not yet initialized, null returned from a scheduler factory.","solutions":["Pass a concrete scheduler such as Scheduler.Default, Scheduler.CurrentThread, or Scheduler.NewThread","Inject the scheduler via the constructor instead of a nullable field","Use the non-scheduler StartWith overload if no custom scheduling is needed"],"exampleFix":"// before\nIScheduler sched = GetScheduler(); // may be null\nvar result = source.StartWith(sched, 1, 2);\n// after\nvar result = source.StartWith(sched ?? Scheduler.Default, 1, 2);","handlingStrategy":"validation","validationCode":"if (scheduler == null) throw new ArgumentNullException(nameof(scheduler));","typeGuard":"bool HasScheduler(IScheduler s) => s is not null;","tryCatchPattern":"try { var r = source.StartWith(scheduler, values); }\ncatch (ArgumentNullException ex) when (ex.ParamName == \"scheduler\") { /* fall back to default scheduler */ }","preventionTips":["Default schedulers with scheduler ?? Scheduler.Default","Ensure IScheduler is registered in the DI container","Never return null from scheduler factory methods"],"tags":["csharp","rx","null-argument","scheduler"],"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"}