{"record":{"id":"0983f9c22c75f3ee","repo":"dotnet/wpf","slug":"sr-getterorsetterrequired","errorCode":null,"errorMessage":"SR.GetterOrSetterRequired","messagePattern":"SR\\.GetterOrSetterRequired","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/XamlMember.cs","lineNumber":107,"sourceCode":"            XamlSchemaContext schemaContext)\n            :this(attachablePropertyName, getter, setter, schemaContext, null)\n        {\n        }\n\n        public XamlMember(string attachablePropertyName, MethodInfo getter, MethodInfo setter,\n            XamlSchemaContext schemaContext, XamlMemberInvoker invoker)\n            :this(attachablePropertyName, getter, setter, schemaContext, invoker, new MemberReflector(getter, setter, isEvent: false))\n        {\n        }\n\n        internal XamlMember(string attachablePropertyName, MethodInfo getter, MethodInfo setter,\n            XamlSchemaContext schemaContext, XamlMemberInvoker invoker, MemberReflector reflector)\n        {\n            ArgumentNullException.ThrowIfNull(schemaContext);\n            MethodInfo accessor = getter ?? setter;\n            if (accessor is null)\n            {\n                throw new ArgumentNullException(SR.GetterOrSetterRequired, (Exception)null);\n            }\n\n            _name = attachablePropertyName ?? throw new ArgumentNullException(nameof(attachablePropertyName));\n\n            ValidateGetter(getter, nameof(getter));\n            ValidateSetter(setter, nameof(setter));\n\n            _declaringType = schemaContext.GetXamlType(accessor.DeclaringType);\n            _reflector = reflector;\n            _memberType = MemberType.Attachable;\n            _reflector.Invoker = invoker;\n            _underlyingMember.Value = getter ?? setter;\n        }\n\n        // Known attachable event\n        public XamlMember(string attachableEventName, MethodInfo adder, XamlSchemaContext schemaContext)\n            :this(attachableEventName, adder, schemaContext, null)\n        {","sourceCodeStart":89,"sourceCodeEnd":125,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/XamlMember.cs#L89-L125","documentation":"The attachable-member XamlMember constructor requires at least one of 'getter' or 'setter' to be a non-null MethodInfo. When both are null it throws ArgumentNullException whose message is SR.GetterOrSetterRequired. Without an accessor the member cannot be read or written.","triggerScenarios":"Calling new XamlMember(attachablePropertyName, getter: null, setter: null, schemaContext, invoker, reflector) — i.e. both accessor MethodInfos are null.","commonSituations":"Reflecting attachable properties where the getter and setter are discovered via reflection (e.g. Type.GetMethod with loose binding flags) and neither lookup matched.","solutions":["Pass at least one valid accessor MethodInfo (getter or setter).","Fix the reflection lookup (method name must be 'Get<Name>'/'Set<Name>' and public static) so an accessor is found.","Verify you are not accidentally passing variables that were assigned null earlier."],"exampleFix":"// before\nvar member = new XamlMember(\"MyAttached\", null, null, schemaContext, invoker, reflector);\n// after\nvar getter = declaringType.GetMethod(\"GetMyAttached\", BindingFlags.Public | BindingFlags.Static);\nvar member = new XamlMember(\"MyAttached\", getter, null, schemaContext, invoker, reflector);","handlingStrategy":"validation","validationCode":"if (getter is null && setter is null) throw new ArgumentException(\"At least one of getter or setter is required\");","typeGuard":"bool HasAccessor(MethodInfo g, MethodInfo s) => g is not null || s is not null;","tryCatchPattern":null,"preventionTips":["Verify reflection lookups for Get/Set accessors return non-null before constructing.","Log accessor lookups to catch broken naming conventions (Get<Name>/Set<Name>)."],"tags":["xaml","null-argument","reflection"],"backgroundTag":"missing-required-argument","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-21T21:30:21.729Z"}