班级名单不起作用

时间:2013-07-20 21:27:49

标签: c# list class

我接受了很多人的建议,而不是使用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行读取的数据。 ...

2 个答案:

答案 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);
  }
}

您的计划目前正在做的是:

enter image description here

答案 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可见的范围,但没有任何好处。