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