循环遍历记录集并将每一行添加到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);
每次循环创建一个新列表。解决你的问题。因为它是一个引用类型,对它调用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);