{"record":{"id":"5db703e03b613021","repo":"dotnet/machinelearning","slug":"value-cannot-be-null-parameter-row","errorCode":null,"errorMessage":"Value cannot be null. (Parameter 'row')","messagePattern":"Value cannot be null\\. \\(Parameter 'row'\\)","errorType":"validation","errorClass":"System.ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.Data.Analysis/DataFrame.cs","lineNumber":621,"sourceCode":"\n        /// <summary> \n        /// Appends a row by enumerating column names and values from <paramref name=\"row\"/> \n        /// </summary> \n        /// <remarks>If a column's value doesn't match its column's data type, a conversion will be attempted</remarks> \n        /// <param name=\"row\">An enumeration of column name and value to be appended</param> \n        /// <param name=\"inPlace\">If set, appends <paramref name=\"row\"/> in place. Otherwise, a new DataFrame is returned with an appended <paramref name=\"row\"/> </param>\n        /// <param name=\"cultureInfo\">Culture info for formatting values</param>\n        public DataFrame Append(IEnumerable<KeyValuePair<string, object>> row, bool inPlace = false, CultureInfo cultureInfo = null)\n        {\n            if (cultureInfo == null)\n            {\n                cultureInfo = CultureInfo.CurrentCulture;\n            }\n\n            DataFrame ret = inPlace ? this : Clone();\n            if (row == null)\n            {\n                throw new ArgumentNullException(nameof(row));\n            }\n\n            List<object> cachedObjectConversions = new List<object>();\n            foreach (KeyValuePair<string, object> columnAndValue in row)\n            {\n                string columnName = columnAndValue.Key;\n                int index = ret.Columns.IndexOf(columnName);\n                if (index == -1)\n                {\n                    throw new ArgumentException(String.Format(Strings.InvalidColumnName, columnName), nameof(columnName));\n                }\n\n                DataFrameColumn column = ret.Columns[index];\n                object value = columnAndValue.Value;\n                if (value != null)\n                {\n                    value = Convert.ChangeType(value, column.DataType, cultureInfo);\n                    if (value is null)","sourceCodeStart":603,"sourceCodeEnd":639,"githubUrl":"https://github.com/dotnet/machinelearning/blob/7b76e69cf964daeca3f1377af6bc5543284d56c6/src/Microsoft.Data.Analysis/DataFrame.cs#L603-L639","documentation":"DataFrame.Append(DataFrameRow row, ...) throws ArgumentNullException(nameof(row)) when the row is null (message: \"Value cannot be null. (Parameter 'row')\"). The method must enumerate the row's key/value pairs to map values onto columns, so a null row is rejected before any work. In this source region it appears in the in-place Append path after the ret DataFrame is resolved.","triggerScenarios":"Calling df.Append(null) or appending the result of a row factory/lookup that returned null (e.g. rows.ElementAt(i) out of range, a failed parse returning null).","commonSituations":"Looping over a collection of rows where some entries are null (sparse data, filtered source); a builder method that returns null on invalid input instead of throwing; LINQ FirstOrDefault returning null.","solutions":["Guard the call: if (row != null) df.Append(row); — skip or log null rows explicitly.","Fix the row-producing code so it never returns null (throw or substitute an empty DataFrameRow).","Catch ArgumentNullException around Append to identify which batch entry was missing.","Use FirstOrDefault carefully — check for null before appending its result."],"exampleFix":"// before\nforeach (var r in parsedRows)\n    df.Append(r); // r may be null\n// after\nforeach (var r in parsedRows)\n{\n    if (r == null) { logSkip(); continue; }\n    df.Append(r);\n}","handlingStrategy":"type-guard","validationCode":"if (row == null) { logger.LogWarning(\"Skipping null row\"); return; }\ndf.Append(row);","typeGuard":"bool CanAppend(DataFrameRow row) => row is not null;","tryCatchPattern":"try { df.Append(row); }\ncatch (ArgumentNullException ex) { logger.LogError(ex, \"Null row passed to Append\"); throw; }","preventionTips":["Never return null from row-building methods; throw or yield an empty row","Check FirstOrDefault results for null before appending","Use nullable annotations (DataFrameRow?) to catch nulls at compile time"],"tags":["argument-null","append","row","dataframe"],"backgroundTag":"null-argument","analyzedSha":"7b76e69cf964daeca3f1377af6bc5543284d56c6","analyzedAt":"2026-09-11T12:35:38.930Z","contentChangedAt":"2026-09-11T12:35:38.930Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}