unoplatform/uno · error · ArgumentNullException

property

Error message

property

What it means

XamlWriterInternalBase.WriteStartMember throws ArgumentNullException('property') when a null XamlMember is written. The member is added to the current object's written-properties list and compared against XamlLanguage.PositionalParameters, so a null member corrupts both state tracking and duplicate detection.

Source

Thrown at src/SourceGenerators/System.Xaml/System.Xaml/XamlWriterInternalBase.cs:185

			manager.StartObject ();

			var cstate = new ObjectState () {Type = xamlType};
			object_states.Push (cstate);

			OnWriteStartObject ();
		}
		
		public void WriteValue (object value)
		{
			manager.Value ();

			OnWriteValue (value);
		}
		
		public void WriteStartMember (XamlMember property)
		{
			if (property == null)
				throw new ArgumentNullException ("property");

			manager.StartMember ();
			if (property == XamlLanguage.PositionalParameters)
				// this is an exception that indicates the state manager to accept more than values within this member.
				manager.AcceptMultipleValues = true;

			var state = object_states.Peek ();
			var wpl = state.WrittenProperties;
			if (wpl.Any (wp => wp.Member == property))
				throw new XamlDuplicateMemberException (String.Format (CultureInfo.InvariantCulture, "Property '{0}' is already set to this '{1}' object", property, object_states.Peek ().Type));
			wpl.Add (new MemberAndValue (property));
			if (property == XamlLanguage.PositionalParameters)
				state.PositionalParameterIndex = 0;

			OnWriteStartMember (property);
		}
		
		public void WriteEndObject ()

View on GitHub (pinned to 0418340488)

Solutions

  1. Resolve the XamlMember before writing it; if resolution fails, report an error rather than writing null.
  2. In custom readers, ensure Member is non-null when NodeType == StartMember.
  3. Skip unknown members if your pipeline policy allows it, instead of writing null.

Example fix

// before
if (reader.NodeType == XamlNodeType.StartMember)
    writer.WriteStartMember(reader.Member);

// after
if (reader.NodeType == XamlNodeType.StartMember && reader.Member != null)
    writer.WriteStartMember(reader.Member);
Defensive patterns

Strategy: type-guard

Validate before calling

if (reader.NodeType == XamlNodeType.StartMember && reader.Member != null)
    writer.WriteStartMember(reader.Member);

Type guard

static bool CanWriteStartMember(XamlReader r) => r.NodeType == XamlNodeType.StartMember && r.Member is not null;

Prevention

When it happens

Trigger: Forwarding a StartMember node from a reader whose Member property is null (reader not positioned on a member, or member resolution failed), or programmatically writing a member before it was resolved.

Common situations: Custom XamlReader returning null Member on StartMember nodes; member-resolution code that returns null for unknown properties and the pipeline forwards it anyway; tests of the guard.

Related errors


AI-assisted analysis of unoplatform/uno@0418340488 (2026-08-13). Data as JSON: /api/errors/bed2194fee93f229. Report an issue: GitHub.