2012-04-12 88 views
0
 Dictionary<string, string> f = new Dictionary<string, string>(); 
     Dictionary<int, Dictionary<string, string>> lines = new Dictionary<int, Dictionary<string, string>>(); 

     while ((line = sr.ReadLine()) != null) 
     { 
      lineArr = line.Split(','); 
      int x = 0; 
      foreach (string field in lineArr) 
      { 
       f.Add(keys[x], field); 
       x++; 
      } 
      lines.Add(lineIndex, f); 
      f.Clear(); 
      lineIndex++; 

詞典f是臨時的,我想將它的值存儲在另一個詞典中,但是一旦我清除()它在Dictionary行中的值會丟失,我猜它會提供某種參考。任何想法如何解決這個問題?字典詞典失去其價值

+3

'清除'傾向於這樣做:) – leppie 2012-04-12 15:55:09

+0

你說得很對,它提到了另一個字典裏面的字典的引用,而不是它的副本。答案描述瞭如何處理這種行爲。 – Servy 2012-04-12 15:55:28

+1

爲什麼你要使用Dictionary >而不是'List >'? – covertCoder 2012-04-12 15:59:06

回答

8

f的聲明移到循環中。然後,你就不必每次清空和參考保持不變:

Dictionary<int, Dictionary<string, string>> lines = new Dictionary<int, Dictionary<string, string>>(); 

while ((line = sr.ReadLine()) != null) 
{ 
    Dictionary<string, string> f = new Dictionary<string, string>(); 

    lineArr = line.Split(','); 
    int x = 0; 
    foreach (string field in lineArr) 
    { 
     f.Add(keys[x], field); 
     x++; 
    } 
    lines.Add(lineIndex, f); 

    lineIndex++; 
2

變量f保存到Dictionary<string, string>對象的引用。當你將它添加到另一個字典時,你不會創建一個新的對象,只會引用另一個對象。

我強烈推薦以f = new Dictionary<string, string>()作爲阻力最小的路徑。