2016-08-23 47 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);