Unity-Technologies/UnityCsReference · error · ArgumentNullException
sortAscending
Error message
sortAscending
What it means
Thrown by MultiColumnHeader.SetSortingColumns when the sortAscending boolean array is null. Each column index must have a corresponding ascending/descending flag, so a null flags array is rejected.
Source
Thrown at Editor/Mono/GUI/TreeView/MultiColumnHeader.cs:75
if (value == null)
throw new ArgumentNullException("state", "MultiColumnHeader state is not allowed to be null");
m_State = value;
}
}
public MultiColumnHeader(MultiColumnHeaderState state)
{
m_State = state;
m_HeaderButtonsControlID = GUIUtility.GetPermanentControlID();
}
public void SetSortingColumns(int[] columnIndices, bool[] sortAscending)
{
if (columnIndices == null)
throw new ArgumentNullException("columnIndices");
if (sortAscending == null)
throw new ArgumentNullException("sortAscending");
if (columnIndices.Length != sortAscending.Length)
throw new ArgumentException("Input arrays should have same length");
if (columnIndices.Length > state.maximumNumberOfSortedColumns)
throw new ArgumentException("The maximum number of sorted columns is " + state.maximumNumberOfSortedColumns + ". Trying to set " + columnIndices.Length + " columns.");
if (columnIndices.Length != columnIndices.DistinctCount())
throw new ArgumentException("Duplicate column indices are not allowed", "columnIndices");
bool changed = false;
if (!columnIndices.AsSpan().SequenceEqual(state.sortedColumns))
{
state.sortedColumns = columnIndices;
changed = true;
}
View on GitHub (pinned to 225b0fbdb5)
Solutions
- Construct a boolean array matching the length of columnIndices (e.g. all true for ascending).
- Use 'Array.Empty<bool>()' when columnIndices is also empty.
- Generate the flags from a sort definition before calling.
Example fix
// before header.SetSortingColumns(cols, null); // after bool[] ascending = cols.Select(c => true).ToArray(); header.SetSortingColumns(cols, ascending);
Defensive patterns
Strategy: validation
Validate before calling
bool[] asc = (sortAscending ?? new bool[columnIndices.Length]).ToArray(); if (asc.Length != columnIndices.Length) asc = columnIndices.Select(_ => true).ToArray();
Type guard
static bool IsValidFlagsArray(bool[] a, int expected) => a != null && a.Length == expected;
Prevention
- Always build the flags array in lockstep with the indices array.
- Default missing flags to true (ascending) explicitly rather than null.
- Derive both arrays from a single sort-specification structure.
When it happens
Trigger: Calling SetSortingColumns(columnIndices, null); providing column indices but omitting the sort directions.
Common situations: Forgetting to build the parallel boolean array; a default-ascending shortcut that passes null intending 'all ascending'.
Related errors
- MultiColumnHeader state is not allowed to be null
- columnIndices
- columns are no allowed to be null
- visibleColumns should not be set to null
- Input arrays should have same length
AI-assisted analysis of Unity-Technologies/UnityCsReference@225b0fbdb5 (2026-08-13).
Data as JSON: /api/errors/bd2b0307990019db.
Report an issue: GitHub.