{"record":{"id":"950cd203911e7051","repo":"dotnet/reactive","slug":"strings-linq-could-not-find-instance-event","errorCode":null,"errorMessage":"Strings_Linq.COULD_NOT_FIND_INSTANCE_EVENT","messagePattern":"Strings_Linq\\.COULD_NOT_FIND_INSTANCE_EVENT","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"Rx.NET/Source/src/System.Reactive/Internal/ReflectionUtils.cs","lineNumber":38,"sourceCode":"            return method.CreateDelegate(delegateType, o);\n        }\n\n#if HAS_TRIMMABILITY_ATTRIBUTES\n    [RequiresUnreferencedCode(Constants_Core.EventReflectionTrimIncompatibilityMessage)]\n#endif\n        public static void GetEventMethods<TSender, TEventArgs>(Type targetType, object? target, string eventName, out MethodInfo addMethod, out MethodInfo removeMethod, out Type delegateType, out bool isWinRT)\n        {\n            EventInfo? e;\n\n            if (target == null)\n            {\n                e = targetType.GetEvent(eventName, BindingFlags.Public | BindingFlags.Static)\n                    ?? throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Strings_Linq.COULD_NOT_FIND_STATIC_EVENT, eventName, targetType.FullName));\n            }\n            else\n            {\n                e = targetType.GetEvent(eventName, BindingFlags.Public | BindingFlags.Instance)\n                    ?? throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Strings_Linq.COULD_NOT_FIND_INSTANCE_EVENT, eventName, targetType.FullName));\n            }\n\n            addMethod = e.GetAddMethod() ?? throw new InvalidOperationException(Strings_Linq.EVENT_MISSING_ADD_METHOD);\n            removeMethod = e.GetRemoveMethod() ?? throw new InvalidOperationException(Strings_Linq.EVENT_MISSING_REMOVE_METHOD);\n\n            var psa = addMethod.GetParameters();\n            if (psa.Length != 1)\n            {\n                throw new InvalidOperationException(Strings_Linq.EVENT_ADD_METHOD_SHOULD_TAKE_ONE_PARAMETER);\n            }\n\n            var psr = removeMethod.GetParameters();\n            if (psr.Length != 1)\n            {\n                throw new InvalidOperationException(Strings_Linq.EVENT_REMOVE_METHOD_SHOULD_TAKE_ONE_PARAMETER);\n            }\n\n            isWinRT = false;","sourceCodeStart":20,"sourceCodeEnd":56,"githubUrl":"https://github.com/dotnet/reactive/blob/94b5d5ab912789f5abe9a72138a25bbd716fe59c/Rx.NET/Source/src/System.Reactive/Internal/ReflectionUtils.cs#L20-L56","documentation":"The instance-mode counterpart of error 2575: when a target instance is supplied, GetEventMethods searches public instance events and throws InvalidOperationException 'Could not find instance event <name> on <type>' if not found. Used by Observable.FromEventPattern with an instance target.","triggerScenarios":"Observable.FromEventPattern(target, eventName, targetType) where eventName does not match a public instance event on the target's type.","commonSituations":"Typos or casing mismatches in event names; the event is static but a target was passed; event made private/internal; refactoring renamed the event while the string literal remained.","solutions":["Correct the event name string to match the public instance event exactly (case-sensitive).","If the event is static, pass null as the target to use the static lookup path.","Switch to the generic FromEventPattern<TEventHandler, TArgs>(handler => obj.Event += handler, ...) overload to get compile-time checking instead of string reflection."],"exampleFix":"// before\nObservable.FromEventPattern(btn, \"Clik\", typeof(Button)); // typo\n// after\nObservable.FromEventPattern(btn, \"Click\", typeof(Button));","handlingStrategy":"validation","validationCode":"var evt = target.GetType().GetEvent(eventName, BindingFlags.Public | BindingFlags.Instance);\nif (evt == null) throw new ArgumentException($\"Instance event '{eventName}' not found on {target.GetType().FullName}\");\nObservable.FromEventPattern(target, eventName, target.GetType());","typeGuard":"static bool HasInstanceEvent(object o, string name) => o.GetType().GetEvent(name, BindingFlags.Public | BindingFlags.Instance) != null;","tryCatchPattern":"try { Observable.FromEventPattern(target, eventName, targetType); } catch (InvalidOperationException ex) when (ex.Message.Contains(\"instance event\")) { /* fix name or use static path */ }","preventionTips":["Use nameof(...) for event names so renames break at compile time.","Verify event visibility (public) before reflection-based subscription.","Migrate to delegate-based FromEventPattern overloads for type safety."],"tags":["reflection","event","not-found"],"backgroundTag":"resource-not-found","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"}