{"record":{"id":"e240fe307a92d416","repo":"dotnet/wpf","slug":"member","errorCode":null,"errorMessage":"member","messagePattern":"member","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Schema/XamlMemberInvoker.cs","lineNumber":25,"sourceCode":"using System.Xaml.MS.Impl;\n\nnamespace System.Xaml.Schema\n{\n    public class XamlMemberInvoker\n    {\n        private static XamlMemberInvoker s_Directive;\n        private static XamlMemberInvoker s_Unknown;\n\n        private XamlMember _member;\n        private NullableReference<MethodInfo> _shouldSerializeMethod;\n\n        protected XamlMemberInvoker()\n        {\n        }\n\n        public XamlMemberInvoker(XamlMember member)\n        {\n            _member = member ?? throw new ArgumentNullException(nameof(member));\n        }\n\n        public static XamlMemberInvoker UnknownInvoker\n        {\n            get\n            {\n                if (s_Unknown is null)\n                {\n                    s_Unknown = new XamlMemberInvoker();\n                }\n\n                return s_Unknown;\n            }\n        }\n\n        public MethodInfo UnderlyingGetter\n        {\n            get { return IsUnknown ? null : _member.Getter; }","sourceCodeStart":7,"sourceCodeEnd":43,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Schema/XamlMemberInvoker.cs#L7-L43","documentation":"The public XamlMemberInvoker(XamlMember member) constructor requires a non-null XamlMember; passing null throws ArgumentNullException with the parameter name 'member'. A member invoker is meaningless without its owning member, so null is rejected up front.","triggerScenarios":"Calling `new XamlMemberInvoker(null)`, e.g. when the member comes from a lookup that returned null (XamlType.GetMember miss) and the result is passed straight into the constructor.","commonSituations":"Custom XAML value serializers/MarkupExtension support code fetching a member then constructing its invoker; refactoring where a nullable member variable began being passed without a null check.","solutions":["Null-check the XamlMember before constructing the invoker and handle the 'member not found' case explicitly.","Use the member's invoker directly: XamlMember.Invoker already exposes a correctly constructed XamlMemberInvoker.","For the unknown-member sentinel case, use XamlMemberInvoker.UnknownInvoker instead of constructing one."],"exampleFix":"// before\nvar invoker = new XamlMemberInvoker(type.GetMember(memberName)); // throws if memberName not found\n// after\nvar member = type.GetMember(memberName);\nif (member is null) { /* handle unresolved member */ return; }\nvar invoker = member.Invoker;","handlingStrategy":"type-guard","validationCode":"if (member is null) return; // or throw a domain-specific error","typeGuard":"static bool TryGetInvoker(XamlMember? m, out XamlMemberInvoker? invoker) { invoker = m?.Invoker; return invoker is not null; }","tryCatchPattern":"try { var invoker = new XamlMemberInvoker(member); }\ncatch (ArgumentNullException ex) when (ex.ParamName == \"member\") { /* member lookup failed */ }","preventionTips":["Prefer member.Invoker over manual construction","Enable nullable reference types so nullable XamlMember is visible at compile time","Handle GetMember null returns immediately at the lookup site"],"tags":["wpf","system-xaml","argument-null-exception","constructor"],"backgroundTag":"null-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"}