{"record":{"id":"36b4735207a70e46","repo":"dotnet/reactive","slug":"value-cannot-be-null-parameter-resultselector-generate","errorCode":null,"errorMessage":"Value cannot be null. (Parameter 'resultSelector')","messagePattern":"Value cannot be null\\. \\(Parameter 'resultSelector'\\)","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"AsyncRx.NET/System.Reactive.Async/Linq/Operators/Generate.cs","lineNumber":31,"sourceCode":"        {\n            if (condition == null)\n                throw new ArgumentNullException(nameof(condition));\n            if (iterate == null)\n                throw new ArgumentNullException(nameof(iterate));\n            if (resultSelector == null)\n                throw new ArgumentNullException(nameof(resultSelector));\n\n            return Create<TResult>(observer => AsyncObserver.Generate(observer, initialState, condition, iterate, resultSelector));\n        }\n\n        public static IAsyncObservable<TResult> Generate<TState, TResult>(TState initialState, Func<TState, bool> condition, Func<TState, TState> iterate, Func<TState, TResult> resultSelector, IAsyncScheduler scheduler)\n        {\n            if (condition == null)\n                throw new ArgumentNullException(nameof(condition));\n            if (iterate == null)\n                throw new ArgumentNullException(nameof(iterate));\n            if (resultSelector == null)\n                throw new ArgumentNullException(nameof(resultSelector));\n            if (scheduler == null)\n                throw new ArgumentNullException(nameof(scheduler));\n\n            return Create<TResult>(observer => AsyncObserver.Generate(observer, initialState, condition, iterate, resultSelector, scheduler));\n        }\n\n        public static IAsyncObservable<TResult> Generate<TState, TResult>(TState initialState, Func<TState, ValueTask<bool>> condition, Func<TState, ValueTask<TState>> iterate, Func<TState, ValueTask<TResult>> resultSelector)\n        {\n            if (condition == null)\n                throw new ArgumentNullException(nameof(condition));\n            if (iterate == null)\n                throw new ArgumentNullException(nameof(iterate));\n            if (resultSelector == null)\n                throw new ArgumentNullException(nameof(resultSelector));\n\n            return Create<TResult>(observer => AsyncObserver.Generate(observer, initialState, condition, iterate, resultSelector));\n        }\n","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/dotnet/reactive/blob/94b5d5ab912789f5abe9a72138a25bbd716fe59c/AsyncRx.NET/System.Reactive.Async/Linq/Operators/Generate.cs#L13-L49","documentation":"The scheduler-based Generate overload throws ArgumentNullException with parameter name 'resultSelector' when the state-to-result mapping delegate is null; the .NET runtime message is 'Value cannot be null. (Parameter 'resultSelector')'.","triggerScenarios":"Calling AsyncObservable.Generate(initialState, condition, iterate, null, scheduler) — the fourth argument is null, frequently from positional confusion in the five-parameter overload.","commonSituations":"Optional selector arguments defaulting to null; argument lists assembled dynamically where the selector was skipped; copy-paste errors leaving a placeholder null.","solutions":["Pass a non-null selector, e.g. x => x.ToString(), as the fourth argument","Match arguments to the (initialState, condition, iterate, resultSelector, scheduler) order","Coalesce or validate the selector where it is produced rather than at the Generate call"],"exampleFix":"// before\nAsyncObservable.Generate(0, x => x < 10, x => x + 1, null, Scheduler.Default);\n// after\nAsyncObservable.Generate(0, x => x < 10, x => x + 1, x => x, Scheduler.Default);","handlingStrategy":"validation","validationCode":"if (resultSelector == null)\n    throw new ArgumentNullException(nameof(resultSelector));\nvar obs = AsyncObservable.Generate(state, condition, iterate, resultSelector, scheduler);","typeGuard":"static bool HasResultSelector<TState, TResult>(Func<TState, TResult>? selector) => selector != null;","tryCatchPattern":"try\n{\n    var obs = AsyncObservable.Generate(state, condition, iterate, selector, scheduler);\n}\ncatch (ArgumentNullException ex) when (ex.ParamName == \"resultSelector\")\n{\n    // fix argument order or provide the selector\n}","preventionTips":["Double-check the five-parameter order before calling","Use inline lambdas so nulls cannot slip in","Add early validation wherever Generate arguments are assembled"],"tags":["null-argument","argumentnull","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-15T23:17:13.987Z"}