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

时间:2016-08-23 16:34:35

标签: c# dictionary

我正在寻找解决我在尝试循环记录集时遇到的问题的解决方案,抓取我需要的列,将值添加到列表中,然后将列表添加到字典值。

这适用于第一条记录,但在我尝试清除列表以将下面的8个字段插入列表后,它将清除字典中的现有列表值(在已经添加之后)。

有没有办法解决这个问题?

In [570]: np.savetxt('x.txt',x,fmt='%d  %d  %s;')
In [571]: cat x.txt     # shell command to display the file
1  3  test1;
2  2  test2;
3  2  test3;

3 个答案:

答案 0 :(得分:0)

每个循环创建一个新列表。这解决了你的问题。因为它是一个调用clear的引用类型将导致该引用清除 - 包括字典中的引用。

答案 1 :(得分:0)

尝试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);

答案 2 :(得分:0)

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

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);