2016-08-23 75 views
0

我正在寻找一个解决方案,通过记录试图循环时,我有一个问题,抓住我需要的列,值添加到列表中,然后加该列表为字典值。循环通过记录和添加每一行的解释

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

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

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

'dbList'是参考对象。你只能创建其中的一个,所以同一个被添加(并清除)一个over。创建一个新的列表来存储新值 – Plutonix

+2

尝试'DBLIST =新名单();',而不是'dbList.Clear()' –

回答

0

每个循环创建一个新列表。这解决了你的问题。因为它是一个引用类型调用它明确将导致参照明确的 - 包括一个在你的字典。

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

你为什么intializing您名单使用前两次呢? –

+0

编辑了答案 –

0

这是因为DBLIST是引用类型,你传递一个参考字典,然后调用上清除内部参考同明确列表的状态。

移动创建和使用dbList到内循环,然后创建与每一个循环迭代一个新实例,不叫清除。

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