{"record":{"id":"b513136b1df4dc2f","repo":"dotnet/reactive","slug":"nameof-target","errorCode":null,"errorMessage":"nameof(target)","messagePattern":"nameof\\(target\\)","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"AsyncRx.NET/System.Reactive.Async/Linq/Operators/FromEventPattern.cs","lineNumber":97,"sourceCode":"\n        public static IAsyncObservable<EventPattern<TEventArgs>> FromEventPattern<TEventArgs>(Action<EventHandler<TEventArgs>> addHandler, Action<EventHandler<TEventArgs>> removeHandler, IAsyncScheduler scheduler)\n        {\n            if (addHandler == null)\n                throw new ArgumentNullException(nameof(addHandler));\n            if (removeHandler == null)\n                throw new ArgumentNullException(nameof(removeHandler));\n            if (scheduler == null)\n                throw new ArgumentNullException(nameof(scheduler));\n\n            return FromEvent<EventHandler<TEventArgs>, object, TEventArgs>(action => ConvertDelegate<Action<object, TEventArgs>, EventHandler<TEventArgs>>(action), addHandler, removeHandler, scheduler).Select(t => new EventPattern<TEventArgs>(t.arg1, t.arg2));\n        }\n\n        public static IAsyncObservable<EventPattern<object>> FromEventPattern(object target, string eventName) => FromEventPattern(target, eventName, GetSchedulerForCurrentContext());\n\n        public static IAsyncObservable<EventPattern<object>> FromEventPattern(object target, string eventName, IAsyncScheduler scheduler)\n        {\n            if (target == null)\n                throw new ArgumentNullException(nameof(target));\n            if (eventName == null)\n                throw new ArgumentNullException(nameof(eventName));\n            if (scheduler == null)\n                throw new ArgumentNullException(nameof(scheduler));\n\n            return FromEventPatternCore<object, object, EventPattern<object>>(target.GetType(), target, eventName, scheduler, (o, e) => new EventPattern<object>(o, e));\n        }\n\n        public static IAsyncObservable<EventPattern<TEventArgs>> FromEventPattern<TEventArgs>(object target, string eventName) => FromEventPattern<TEventArgs>(target, eventName, GetSchedulerForCurrentContext());\n\n        public static IAsyncObservable<EventPattern<TEventArgs>> FromEventPattern<TEventArgs>(object target, string eventName, IAsyncScheduler scheduler)\n        {\n            if (target == null)\n                throw new ArgumentNullException(nameof(target));\n            if (eventName == null)\n                throw new ArgumentNullException(nameof(eventName));\n            if (scheduler == null)\n                throw new ArgumentNullException(nameof(scheduler));","sourceCodeStart":79,"sourceCodeEnd":115,"githubUrl":"https://github.com/dotnet/reactive/blob/94b5d5ab912789f5abe9a72138a25bbd716fe59c/AsyncRx.NET/System.Reactive.Async/Linq/Operators/FromEventPattern.cs#L79-L115","documentation":"ArgumentNullException thrown by the reflection-based FromEventPattern(object target, string eventName, IAsyncScheduler scheduler) overload when target is null. This overload later calls target.GetType(), so a null target would crash with NullReferenceException; the library converts that into a descriptive ArgumentNullException naming the target parameter.","triggerScenarios":"Calling FromEventPattern(null, \"Click\") or (null, \"Click\", scheduler) — usually the event source was lazily created, unloaded, or a WeakReference/optional dependency resolved to null.","commonSituations":"WPF/WinForms scenarios where a control reference is null because FindName failed or the visual tree changed; events on objects that were disposed and nulled out; test fixtures with uninitialized subjects.","solutions":["Ensure the event-source object is created before composing the observable.","Null-check or use a null-conditional/_assert pattern on the target before calling FromEventPattern.","If the source may come and go, wrap resolution in an observable factory that only subscribes when the target exists."],"exampleFix":"// before\nvar obs = AsyncObservable.FromEventPattern(control, \"Click\"); // control == null\n// after\nif (control is null) throw new InvalidOperationException(\"Control not found\");\nvar obs = AsyncObservable.FromEventPattern(control, \"Click\");","handlingStrategy":"validation","validationCode":"if (target is null) throw new InvalidOperationException(\"Event source object not initialized\");","typeGuard":"static bool IsLiveSource<T>(T target) where T : class => target is not null;","tryCatchPattern":"try\n{\n    var obs = AsyncObservable.FromEventPattern(target, eventName);\n}\ncatch (ArgumentNullException ex) when (ex.ParamName == nameof(target))\n{\n    logger.LogError(ex, \"Event source {Name} was null\", eventName);\n}","preventionTips":["Resolve controls/objects before composing observables, not lazily inside subscriptions.","Use null-conditional checks or throw descriptive exceptions at call sites.","In UI code, hook events after InitializeComponent/load completes."],"tags":["argument-null","csharp","reflection","reactive-extensions"],"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"}