循环遍历记录集并将每一行添加到Dictionary中

本文关键字:一行 添加 Dictionary 记录 遍历 循环 | 更新日期: 2023-09-27 18:03:34

我正在寻找一个问题的解决方案,我试图通过记录集循环时,抓住我需要的列,将值添加到列表,然后将列表添加到字典值。

这对于第一个记录很好,但在我尝试清除列表以插入接下来的8个字段到列表后,它从字典中清除现有的列表值(在它已经添加之后)。

有办法绕过这个吗?

List<string> dbList = new List<string>();
Dictionary<int, List<string>> dbDict = new Dictionary<int, List<string>>();
do
{
dbList.Add("Field1 : " (String)rs.Fields["Field1"].Value);
dbList.Add("Field2 : " rs.Fields["Field 2"].Value);
dbList.Add("Field3 : " (String)rs.Fields["Field3"].Value);
dbDict.add(i,dbList);
i+=1;
rs.MoveNext();
dbList.Clear();
}
while (rs.EOF == false);

循环遍历记录集并将每一行添加到Dictionary中

每次循环创建一个新列表。解决你的问题。因为它是一个引用类型,对它调用clear会导致该引用被清除——包括字典中的引用

这是因为dbList是一个引用类型,您传递一个引用给字典,然后在同一引用上调用clear来清除List的内部状态。

dbList的创建和使用移到循环内部,然后在每次循环迭代时创建一个新实例并且不调用Clear.

Dictionary<int, List<string>> dbDict = new Dictionary<int, List<string>>();
do
{
    List<string> dbList = new List<string>();
    dbList.Add("Field1 : " (String)rs.Fields["Field1"].Value);
    dbList.Add("Field2 : " rs.Fields["Field 2"].Value);
    dbList.Add("Field3 : " (String)rs.Fields["Field3"].Value);
    dbDict.add(i,dbList);
    i+=1;
    rs.MoveNext();
}
while (rs.EOF == false);

尝试用dbList = new List<string>();代替dbList.Clear()

解决方案:

List<string> dbList;
Dictionary<int, List<string>> dbDict = new Dictionary<int, List<string>>();
do
{
    dbList = new List<string>();
    dbList.Add("Field1 : " (String)rs.Fields["Field1"].Value);
    dbList.Add("Field2 : " rs.Fields["Field 2"].Value);
    dbList.Add("Field3 : " (String)rs.Fields["Field3"].Value);
    dbDict.add(i,dbList);
    i+=1;
    rs.MoveNext();
}
while (rs.EOF == false);