Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在附加C时维护列表数据_C#_.net_List_Generics - Fatal编程技术网

C# 在附加C时维护列表数据

C# 在附加C时维护列表数据,c#,.net,list,generics,C#,.net,List,Generics,我刚刚注意到我写的函数有一个问题,我意识到了这个问题,但“修复”只会使情况恶化 该函数连接到my db并进行select查询,然后将所有行作为列表返回,预期的行为是为每行返回一个列表,因为每行有多个列,所以我可以使用列表索引访问它们 try { ///Open connection before we can read d

我刚刚注意到我写的函数有一个问题,我意识到了这个问题,但“修复”只会使情况恶化

该函数连接到my db并进行select查询,然后将所有行作为列表返回,预期的行为是为每行返回一个列表,因为每行有多个列,所以我可以使用列表索引访问它们

                    try
                    {
                        ///Open connection before we can read
                        dataConnection.Open();

                        ///Prepare to read
                        reader = dataCommand.ExecuteReader();

                        // Call Read before accessing data.
                        while (reader.Read())
                        {
                            myTestData.Clear();
                            for (int i = 0; i < howManyColumns; i++)
                            {
                                ///Add columns to myTestData list
                                myTestData.Add(reader.GetValue(i).ToString());
                            }
                            ///Add myTestData list to dataRows
                            dataRows.Add(myTestData);
                        }
                    }
                    catch (SqlException exSql)
                    {
                        Program.displayExError(exSql, true);
                    }
我尝试清除列表,因此下次我在列表列表中添加一个列表时,它将不包含任何元素,并避免将所有行追加到同一个列表中,但如果我执行myTestData,则会执行此操作。清除;列表内容被删除,我的列表也失去了它的所有内容,有没有办法在不附加到第一个列表的情况下保留数据

PS:我所做的修复是添加myTestData.Clear;这就是问题的原因,但是如果我把它去掉,所有的行都会附加到第一个列表中,并且没有任何用处。如果问题不清楚,请让我知道并尝试澄清


伙计们

您需要创建一个新列表,而不是清除现有列表。更改mydata。清除为mydata=new List。

我会冒险猜测一下,并说您必须在for循环中重新初始化列表,以便

myTestData.Clear();
试一试

我觉得您的列表在示例中称为dataRows

您可以创建一个新列表并存储它,而不是清除该列表(该列表仍将添加对dataRows列表的引用):

try
{
  ///Open connection before we can read
  dataConnection.Open();

  ///Prepare to read
  reader = dataCommand.ExecuteReader();

  // Call Read before accessing data.
  while (reader.Read())
  {
    List<string> myTestData = new List<string>();
    for (int i = 0; i < howManyColumns; i++)
    {
      ///Add columns to myTestData list
      myTestData.Add(reader.GetValue(i).ToString());
    }
    ///Add myTestData list to dataRows
    dataRows.Add(myTestData);
  }
}
catch (SqlException exSql)
{
  Program.displayExError(exSql, true);
}
将myData视为添加到dataRows的对象引用—清除myData时,dataRows保留的引用反映了相同的更改


因此,每次从datareader读取一行数据时,您只需创建一个新列表。

我知道这就是问题所在,但不知道如何解决它,我一直在尝试临时列表,直到我在这里找到答案为止,谢谢!
myTestData = new List<string>();
try
{
  ///Open connection before we can read
  dataConnection.Open();

  ///Prepare to read
  reader = dataCommand.ExecuteReader();

  // Call Read before accessing data.
  while (reader.Read())
  {
    List<string> myTestData = new List<string>();
    for (int i = 0; i < howManyColumns; i++)
    {
      ///Add columns to myTestData list
      myTestData.Add(reader.GetValue(i).ToString());
    }
    ///Add myTestData list to dataRows
    dataRows.Add(myTestData);
  }
}
catch (SqlException exSql)
{
  Program.displayExError(exSql, true);
}