在添加c#时维护列表数据

本文关键字:列表 数据 维护 添加 | 更新日期: 2023-09-27 18:05:57

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

该函数连接到我的数据库,使选择查询,然后它返回任何行作为List<List<string>>,预期的行为是返回1 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())
                        {
                            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.Clear();

我尝试清除列表,所以下次我添加一个列表到我的列表列表,它将没有元素,避免将所有行附加到相同的列表,但相反,如果我做myTestData.Clear();列表内容被擦除,我的列表列表失去了它的所有内容,任何想法保持数据在没有附加到第一个列表?

PS:我所做的修复是添加myTestData.Clear();,这是什么原因导致的问题,但如果我把它拿走,所有的行都附加到第一个列表,也没有使用。如果问题不清楚,请告诉我试着澄清

Thx的家伙!

在添加c#时维护列表数据

myData想象成一个对象引用,你要把它添加到dataRows上——当你清除myData时,dataRows保留的引用反映了同样的变化。

因此,每次从数据阅读器读取一行时,只需创建一个新的List<string>

您需要创建一个新列表,而不是对现有列表进行Clear。修改mydata.Clear()myData = new List<string>()

我猜你必须在for循环中重新初始化列表所以,而不是

myTestData.Clear();

myTestData = new List<string>();

我注意到您的List<List<string>>从示例中被称为datarow。

与其清除列表(这仍然会将引用添加到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);
}