{"record":{"id":"25d946acbde315f6","repo":"dotnet/maui","slug":"internal-elementtemplate-func-object-loadtemplate","errorCode":null,"errorMessage":"internal ElementTemplate(Func<object> loadTemplate) : this() => LoadTemplate = loadTemplate ?? throw new ArgumentNullException(nameof(loadTemplate));","messagePattern":"internal ElementTemplate\\(Func<object> loadTemplate\\) : this\\(\\) => LoadTemplate = loadTemplate \\?\\? throw new ArgumentNullException\\(nameof\\(loadTemplate\\)\\);","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/Controls/src/Core/ElementTemplate.cs","lineNumber":36,"sourceCode":"\n\t\tinternal ElementTemplate()\n\t\t{\n\t\t}\n\n\t\tinternal ElementTemplate(\n\t\t\t[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] Type type)\n\t\t\t: this()\n\t\t{\n\t\t\tif (type == null)\n\t\t\t\tthrow new ArgumentNullException(nameof(type));\n\n\t\t\t_canRecycle = true;\n\t\t\t_type = type;\n\n\t\t\tLoadTemplate = () => Activator.CreateInstance(type);\n\t\t}\n\n\t\tinternal ElementTemplate(Func<object> loadTemplate) : this() => LoadTemplate = loadTemplate ?? throw new ArgumentNullException(nameof(loadTemplate));\n\n\t\tpublic Func<object> LoadTemplate { get; set; }\n\n\t\tvoid IElementDefinition.AddResourcesChangedListener(Action<object, ResourcesChangedEventArgs> onchanged)\n\t\t{\n\t\t\t_changeHandlers = _changeHandlers ?? new List<Action<object, ResourcesChangedEventArgs>>(1);\n\t\t\t_changeHandlers.Add(onchanged);\n\t\t}\n\n\t\tinternal bool CanRecycle => _canRecycle;\n\n\t\t[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)]\n\t\tinternal Type Type => _type;\n\n\t\tElement IElementDefinition.Parent\n\t\t{\n\t\t\tget { return _parent; }\n\t\t\tset","sourceCodeStart":18,"sourceCodeEnd":54,"githubUrl":"https://github.com/dotnet/maui/blob/f377ff1c5ee04d334d8a925f50c83a6b7afddf03/src/Controls/src/Core/ElementTemplate.cs#L18-L54","documentation":"Thrown by the ElementTemplate(Func<object>) constructor when the loadTemplate delegate is null. This constructor assigns the delegate directly to the public LoadTemplate property, which is later invoked to create content (for DataTemplate/ControlTemplate). A null delegate cannot produce instances, so it is rejected.","triggerScenarios":"Constructing new DataTemplate((Func<object>)null) or new ControlTemplate((Func<object>)null). Happens when a factory method returns null or when a lambda is conditionally assigned and the null path is passed.","commonSituations":"Programmatic template creation where the factory expression evaluates to null; refactoring a lambda out into a variable that is null; conditional template selection passing null in a branch.","solutions":["Pass a non-null Func<object> that returns a valid element instance.","Null-check the delegate before constructing the template.","Provide a fallback factory for the null case."],"exampleFix":"// before\nvar template = new DataTemplate(MaybeNullFactory); // throws if factory is null\n// after\nFunc<object> factory = MaybeNullFactory ?? (() => new DefaultView());\nvar template = new DataTemplate(factory);","handlingStrategy":"validation","validationCode":"if (loadTemplate == null) throw new ArgumentNullException(nameof(loadTemplate));\nvar template = new DataTemplate(loadTemplate);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Null-check the factory delegate before constructing the template.","Provide a default factory when a conditional factory may be null.","Ensure the factory returns a valid Element instance."],"tags":["maui","argumentnull","datatemplate","controltemplate","factory"],"backgroundTag":null,"analyzedSha":"f377ff1c5ee04d334d8a925f50c83a6b7afddf03","analyzedAt":"2026-08-13T14:26:18.069Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}