【问题标题】:class list not working班级列表不起作用
【发布时间】:2013-07-20 21:27:48
【问题描述】:

我听取了许多人的建议,我没有使用 Struct,而是使用类来创建列表

sn-ps 代码

class BigClass

class rawData
{
   public string recType;          
   public string ncmCode;  
}    

然后我使用流读取器将数据获取到对象中。

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

这个对象被添加到列表 myData 但发生的事情是当循环再次使用新的 tempRawData 运行时,它只是将它添加到 myData 并替换之前复制的内容。所以我得到 2 行相同的数据......它对 x 行执行此操作,所以如果它运行 10,000 次,则列表中的 10,000 行包含相同的数据,即在 csv 文件的第 10,000 行读取的数据。 ...

【问题讨论】:

  • Add() 不要替换任何东西,所以你可能弄乱了你的列表。
  • 我在代码的顶部声明了它。代码真的很长,所有的工作,但它只是将数据复制到每一行,它在列表中移动的越多。
  • 我认为您需要在每次迭代中重新初始化 tempRawData。所以在每个循环中使用new。目前,您的列表将包含对同一对象的多个引用。
  • 这就是我的想法,我试过了,myData.Add(new rawData(tempRawData)) 没有成功...
  • 我已更新您的示例以删除不相关的部分 - 请随时回滚。

标签: c# list class


【解决方案1】:
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);
  }
}

你的程序目前正在做什么:

【讨论】:

    【解决方案2】:

    您需要在每次迭代时创建新的 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 之外,并在每次迭代时在内部执行 new,但它会扩展 tempRawData 可见的范围,但没有任何好处。

    【讨论】:

    • 我收到错误“错误 1 ​​'tempRawData' 与声明 'WindowsFormsApplication1.ReadCSV.tempRawData' 冲突”
    • 然后删除原来的声明
    猜你喜欢
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多