{"record":{"id":"398baefff8a522af","repo":"dotnet/wpf","slug":"nameof-name","errorCode":null,"errorMessage":"nameof(name)","messagePattern":"nameof\\(name\\)","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/XamlMember.cs","lineNumber":36,"sourceCode":"        // Initialized in constructor\n        private string _name;\n        private XamlType _declaringType;\n        private readonly MemberType _memberType;\n\n        // Idempotent\n        private ThreeValuedBool _isNameValid;\n\n        // Thread safety: if setting outside ctor, do an interlocked compare against null\n        private MemberReflector _reflector;\n\n        /// <summary>\n        /// Lazy init: NullableReference.IsSet is null when not initialized\n        /// </summary>\n        private NullableReference<MemberInfo> _underlyingMember;\n\n        public XamlMember(string name, XamlType declaringType, bool isAttachable)\n        {\n            _name = name ?? throw new ArgumentNullException(nameof(name));\n            _declaringType = declaringType ?? throw new ArgumentNullException(nameof(declaringType));\n            _memberType = isAttachable ? MemberType.Attachable : MemberType.Instance;\n        }\n\n        // Known property\n        public XamlMember(PropertyInfo propertyInfo, XamlSchemaContext schemaContext)\n            :this(propertyInfo, schemaContext, null)\n        {\n        }\n\n        public XamlMember(PropertyInfo propertyInfo, XamlSchemaContext schemaContext, XamlMemberInvoker invoker)\n            : this(propertyInfo, schemaContext, invoker, new MemberReflector(isEvent: false))\n        {\n        }\n\n        internal XamlMember(PropertyInfo propertyInfo, XamlSchemaContext schemaContext, XamlMemberInvoker invoker, MemberReflector reflector)\n        {\n            ArgumentNullException.ThrowIfNull(propertyInfo);","sourceCodeStart":18,"sourceCodeEnd":54,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/XamlMember.cs#L18-L54","documentation":"The XamlMember(string name, XamlType declaringType, bool isAttachable) constructor requires a non-null member name; the name is fundamental to lookup, ToString, and comparison. Passing null for `name` throws ArgumentNullException(nameof(name)). (Note: the constructor also throws the same for a null declaringType.)","triggerScenarios":"Calling new XamlMember(null, declaringType, isAttachable) — e.g. deriving a member name from reflection where a PropertyInfo/FieldInfo name was null or the variable was uninitialized.","commonSituations":"Custom XamlSchemaContext implementations building members dynamically; metadata-driven code generation where member names come from config or strings parsed at runtime that may be null.","solutions":["Ensure the name string is non-null before constructing; substitute a real member name or fail earlier with a clear message","If the name may be missing, throw a descriptive validation error upstream instead of passing null into XamlMember","Verify the reflection source (PropertyInfo/FieldInfo) is valid before reading its Name"],"exampleFix":"// before\nvar member = new XamlMember(config.Name, declaringType, false); // config.Name may be null\n// after\nif (string.IsNullOrEmpty(config.Name)) throw new InvalidOperationException(\"Member name missing in config\");\nvar member = new XamlMember(config.Name, declaringType, false);","handlingStrategy":"validation","validationCode":"if (string.IsNullOrEmpty(name)) throw new ArgumentException(\"Member name must be non-empty\", nameof(name));\nif (declaringType is null) throw new ArgumentNullException(nameof(declaringType));\nvar member = new XamlMember(name, declaringType, isAttachable);","typeGuard":"static bool IsValidMemberName(string name) => !string.IsNullOrEmpty(name);","tryCatchPattern":"try { member = new XamlMember(name, declaringType, isAttachable); }\ncatch (ArgumentNullException ex) when (ex.ParamName == \"name\") { /* resolve a real member name before constructing */ }","preventionTips":["Validate member names at config/deserialization boundaries before constructing XamlMember","Check reflection sources for null before reading Name","Fail early with descriptive errors rather than nulls flowing into XAML APIs"],"tags":["xaml","argument-null","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-22T01:17:13.364Z"}