我接受了很多人的建议,而不是使用Struct,我使用类来创建列表
代码片段
class BigClass
class rawData
{
public string recType;
public string ncmCode;
}
然后我使用streamreader将数据导入对象。
List<rawData> myData = new List<rawData>();
rawData tempRawData = new rawData();
while ((dataLine = readRawData.ReadLine()) != null)
{
.....
for (int i = 0; i < tokens.Length; i++)
{
// code to set fields of tempRawData stripped
....
}
myData.Add(tempRawData);
}
这个对象被添加到List myData中,但是当循环使用新的tempRawData再次运行时,它只是将它添加到myData并替换之前复制的内容。所以我获得了2行相同的数据...它为x行执行此操作,因此如果它运行10,000次,则列表中的10,000行包含相同的数据,即在csv文件的第10,000行读取的数据。 ...
答案 0 :(得分:3)
List<rawData> myData = new List<rawData>();
while ((dataLine = readRawData.ReadLine()) != null)
{
.....
for (int i = 0; i < tokens.Length; i++)
{
rawData tempRawData = new rawData(); // <======
// code to set fields of tempRawData stripped
....
myData.Add(tempRawData);
}
}
您的计划目前正在做的是:
答案 1 :(得分:1)
您需要在每次迭代时创建新的RawData
对象 - 您正在更新您拥有的唯一对象的字段(与struct
相比,这是相反的行为):
while ((dataLine = readRawData.ReadLine()) != null)
{
RawData tempRawData = new rawData(); // new for each line iteration.
....
for (int i = 0; i < tokens.Length; i++)
{
// set fields of tempRawData here
....
}
myData.Add(tempRawData);
}
注意:您也可以将RawData tempRawData
保留在while
之外,并在每次迭代时执行新的内部操作,但它会扩展tempRawData
可见的范围,但没有任何好处。