{"record":{"id":"821f6260fc532e58","repo":"dotnet/wpf","slug":"argumentnullexception-nameof-propertyname","errorCode":null,"errorMessage":"ArgumentNullException(nameof(propertyName))","messagePattern":"ArgumentNullException\\(nameof\\(propertyName\\)\\)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/XamlNodes.cs","lineNumber":435,"sourceCode":"                int         lineNumber,\n                int         linePosition,\n                int         depth,\n                object      propertyMember,    // DependencyProperty or MethodInfo or PropertyInfo\n                string      assemblyName,\n                string      typeFullName,\n                string      propertyName)\n                : base (token,\n                        lineNumber,\n                        linePosition,\n                        depth)\n            {\n                if (typeFullName == null)\n                {\n                    throw new ArgumentNullException(nameof(typeFullName));\n                }\n                if (propertyName == null)\n                {\n                    throw new ArgumentNullException(nameof(propertyName));\n                }\n                \n                _propertyMember = propertyMember;\n                _assemblyName = assemblyName;\n                _typeFullName = typeFullName;\n                _propName = propertyName;\n            }\n            \n#if PBTCOMPILER\n            /// <summary>\n            /// PropertyInfo for the property for the Node.  This may be null.\n            /// </summary>\n            internal PropertyInfo PropInfo\n            {\n                get { return _propertyMember as PropertyInfo;}\n            }\n#endif\n","sourceCodeStart":417,"sourceCodeEnd":453,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/XamlNodes.cs#L417-L453","documentation":"XamlPropertyBaseNode requires a non-null property name; the node represents a property assignment in the XAML node stream. A null propertyName makes the node meaningless, so ArgumentNullException(nameof(propertyName)) is thrown immediately after the typeFullName check.","triggerScenarios":"Constructing XamlPropertyBaseNode with propertyName == null, e.g. custom reader code emitting a property node whose member name was not resolved.","commonSituations":"Custom XAML node-stream generators, markup extensions whose member resolution failed, tooling that rewrites XAML node streams.","solutions":["Resolve the property/member name before constructing the node.","Guard the call site with a null/empty check on the property name.","Skip or log the malformed property node instead of constructing it with a null name."],"exampleFix":"// before\nvar node = new XamlPropertyBaseNode(propertyMember, assemblyName, typeFullName, null, ...);\n// after\nif (string.IsNullOrEmpty(propertyName)) throw new ArgumentException(\"property name required\", nameof(propertyName));\nvar node = new XamlPropertyBaseNode(propertyMember, assemblyName, typeFullName, propertyName, ...);","handlingStrategy":"validation","validationCode":"if (string.IsNullOrEmpty(propertyName)) throw new InvalidOperationException(\"Property node requires a resolved member name\");","typeGuard":"bool HasPropertyName(XamlMember member) => !string.IsNullOrEmpty(member?.Name);","tryCatchPattern":"try { node = new XamlPropertyBaseNode(...); }\ncatch (ArgumentNullException) { /* skip/log malformed property node */ }","preventionTips":["Resolve members via the type's property lookup before constructing property nodes.","Skip or report nodes with unresolved members instead of passing null."],"tags":["wpf","xaml","argument-null"],"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"}