在添加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的家伙!
把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);
}