2012-04-12 13 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は一時的で、別の辞書にその値を保存したいのですが、一度Clear()すると、辞書の行の値が失われてしまいます。どのようにこれを解決するための任意のアイデア?辞書の辞書はその値を失います

+3

'Clear'はそれをする傾向があります:) – leppie

+0

あなたはそうです、それは他の辞書の中にある辞書への参照です。答えは、この振る舞いに対処する方法を説明しています。 – Servy

+1

'List >'の代わりに 'Dictionary >'を使用する特別な理由は何ですか? – covertCoder

答えて

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

変数fDictionary<string, string>オブジェクトへの参照を保持しています。別の辞書に追加すると、新しいオブジェクトは作成されず、同じオブジェクトへの別の参照のみが作成されます。

ここでは、最も抵抗の少ないパスとしてf = new Dictionary<string, string>()を使用することをおすすめします。