DataRow C# 上的 NullReferenceException
NullReferenceException on DataRow C#
我的问题是关于在 foreach 循环内的第一行之后没有设置为实例的对象。我真的很难想到应该在这里实例化什么。所以请伙计们,我只想将数据从 DataTable 映射到新列表。
在这一行后出错,
aa.fieldParams[counter].field = row["ParameterField"].ToString();
这是我的实际代码。
public class ParsedData
{
public static void ParseData(DataTable parsedData)
{
ObjectProperties aa = new ObjectProperties();
int counter = 0;
foreach (DataRow row in parsedData.Rows)
{
//parsedData.Rows = new DataTable[parsedData.Rows.Count];
aa.fieldParams[counter].field = row["ParameterField"].ToString();
aa.fieldParams[counter].parameterType = row["ParameterType"].ToString();
aa.fieldParams[counter].length = Convert.ToInt32(row["ParameterLength"]);
aa.fieldParams[counter].setIteration = Convert.ToInt32(row["NumberOfIterations"].ToString());
counter++;
}
}
}
这是 ObjectProperties class。
public class ObjectProperties
{
public FieldParameters[] fieldParams { get; set; }
public int Counter { get; set; }
}
public class FieldParameters
{
public string field { get; set; }
public int length { get; set; }
public int setIteration { get; set; }
public string parameterType { get; set; }
}
aa.fieldParams[] 还没有任何值,因为它的值将来自 parsedData.Rows。我目前在行上有正确的值,但在循环内的第一行之后它出错了。
parsedData 值来自 CSV 文件。
在 DataRow 上使用 .ToString() 之前像这样检查 null。
if (!(row["ParameterField"] is DBNull))
aa.fieldParams[counter].field = row["ParameterField"].ToString();
在转换之前还要检查其他行上的空值。
首先初始化你的数组:
ObjectProperties aa = new ObjectProperties();
aa.fieldParams = new FieldParameters[parsedData.Rows.Count]; //initialize your array first
您还没有初始化 Array
的元素:
foreach (DataRow row in parsedData.Rows)
{
aa.fieldParams[counter] = new YourArrayType(); //instantiate the current element
//...your code...
counter++;
}
请记住,当数组包含引用类型元素时,您必须实例化数组的每个元素。
您正在使用 aa.fieldParams,但我只看到 aa 已声明和初始化。字段参数呢?需要初始化吗?你能 post ObjectProperties class 的代码看看 fieldParams 持有什么吗?
可能是 aa.fieldParams 为 null[counter]?
此外,如果您不信任 DataRow 中的列名称,那么最好在尝试访问数据表之前检查数据表中是否存在具有该名称的列。
谢谢,
我的问题是关于在 foreach 循环内的第一行之后没有设置为实例的对象。我真的很难想到应该在这里实例化什么。所以请伙计们,我只想将数据从 DataTable 映射到新列表。
在这一行后出错,
aa.fieldParams[counter].field = row["ParameterField"].ToString();
这是我的实际代码。
public class ParsedData
{
public static void ParseData(DataTable parsedData)
{
ObjectProperties aa = new ObjectProperties();
int counter = 0;
foreach (DataRow row in parsedData.Rows)
{
//parsedData.Rows = new DataTable[parsedData.Rows.Count];
aa.fieldParams[counter].field = row["ParameterField"].ToString();
aa.fieldParams[counter].parameterType = row["ParameterType"].ToString();
aa.fieldParams[counter].length = Convert.ToInt32(row["ParameterLength"]);
aa.fieldParams[counter].setIteration = Convert.ToInt32(row["NumberOfIterations"].ToString());
counter++;
}
}
}
这是 ObjectProperties class。
public class ObjectProperties
{
public FieldParameters[] fieldParams { get; set; }
public int Counter { get; set; }
}
public class FieldParameters
{
public string field { get; set; }
public int length { get; set; }
public int setIteration { get; set; }
public string parameterType { get; set; }
}
aa.fieldParams[] 还没有任何值,因为它的值将来自 parsedData.Rows。我目前在行上有正确的值,但在循环内的第一行之后它出错了。
parsedData 值来自 CSV 文件。
在 DataRow 上使用 .ToString() 之前像这样检查 null。
if (!(row["ParameterField"] is DBNull))
aa.fieldParams[counter].field = row["ParameterField"].ToString();
在转换之前还要检查其他行上的空值。
首先初始化你的数组:
ObjectProperties aa = new ObjectProperties();
aa.fieldParams = new FieldParameters[parsedData.Rows.Count]; //initialize your array first
您还没有初始化 Array
的元素:
foreach (DataRow row in parsedData.Rows)
{
aa.fieldParams[counter] = new YourArrayType(); //instantiate the current element
//...your code...
counter++;
}
请记住,当数组包含引用类型元素时,您必须实例化数组的每个元素。
您正在使用 aa.fieldParams,但我只看到 aa 已声明和初始化。字段参数呢?需要初始化吗?你能 post ObjectProperties class 的代码看看 fieldParams 持有什么吗?
可能是 aa.fieldParams 为 null[counter]?
此外,如果您不信任 DataRow 中的列名称,那么最好在尝试访问数据表之前检查数据表中是否存在具有该名称的列。
谢谢,