{"record":{"id":"9f52ed6cfda76939","repo":"spectreconsole/spectre.console","slug":"value-cannot-be-null-parameter-value","errorCode":null,"errorMessage":"Value cannot be null. (Parameter 'value')","messagePattern":"Value cannot be null\\. \\(Parameter 'value'\\)","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/Spectre.Console/Widgets/Table/TableColumn.cs","lineNumber":24,"sourceCode":"public sealed class TableColumn : IColumn\n{\n    private IRenderable _header = null!;\n    private IRenderable? _footer;\n\n    /// <summary>\n    /// Gets or sets the column header.\n    /// </summary>\n    public IRenderable Header\n    {\n        get => _header;\n        set\n        {\n            if (value is TableCell cell && cell.ColumnSpan > 1)\n            {\n                throw new InvalidOperationException(\"Column spanning is not supported in table header rows.\");\n            }\n\n            _header = value ?? throw new ArgumentNullException(nameof(value));\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the column footer.\n    /// </summary>\n    public IRenderable? Footer\n    {\n        get => _footer;\n        set\n        {\n            if (value is TableCell cell && cell.ColumnSpan > 1)\n            {\n                throw new InvalidOperationException(\"Column spanning is not supported in table footer rows.\");\n            }\n\n            _footer = value;\n        }","sourceCodeStart":6,"sourceCodeEnd":42,"githubUrl":"https://github.com/spectreconsole/spectre.console/blob/0acc92fada6c42f13984e79c2b5f3d993bdfb099/src/Spectre.Console/Widgets/Table/TableColumn.cs#L6-L42","documentation":"The TableColumn.Header setter requires a non-null IRenderable. The setter null-coalesces with 'throw new ArgumentNullException(nameof(value))', so assigning null throws immediately. This guards downstream rendering from null-dereference when laying out the header.","triggerScenarios":"column.Header = null; new TableColumn((IRenderable)null); or assigning a nullable IRenderable variable (IRenderable?) that happens to be null.","commonSituations":"A factory/builder returning null for an absent header; a nullable reference passed without a null check; clearing a header by assigning null instead of an empty Markup; deserialized data yielding null rendered as header.","solutions":["Null-coalesce before assignment: column.Header = maybeNull ?? new Markup(string.Empty).","Validate with ArgumentNullException.ThrowIfNull(value) at the caller boundary.","Use Markup.Empty or new Markup(string.Empty) as a sentinel instead of null."],"exampleFix":"// before\ncolumn.Header = headerRenderable; // headerRenderable may be null\n\n// after\ncolumn.Header = headerRenderable ?? new Markup(string.Empty);","handlingStrategy":"validation","validationCode":"ArgumentNullException.ThrowIfNull(value);\ncolumn.Header = value ?? new Markup(string.Empty);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Coalesce nullable header sources with ?? new Markup(string.Empty).","Use the string TableColumn overload to avoid null IRenderable entirely.","Run nullable reference analysis with <Nullable>enable</Nullable> to catch nulls at compile time."],"tags":["table","header","null-reference","argument"],"backgroundTag":null,"analyzedSha":"0acc92fada6c42f13984e79c2b5f3d993bdfb099","analyzedAt":"2026-08-13T18:27:21.983Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}