2014-10-30 137 views
0

所以,我有一個我寫的代碼的例子。字典類返回空值

我的目標是爲包含鍵(字符串)的字典類輸入值,並且該值是具有鍵(字符串)和值爲List的另一個字典。

問題是,在我清除innerDictionary後,mainDictionary內的值消失。

  List<string> list1 = new List<string>(); 
      list1.Add("1"); 
      list1.Add("2"); 
      list1.Add("3"); 
      List<string> list2 = new List<string>(); 
      list2.Add("4"); 
      list2.Add("5"); 
      list2.Add("6"); 
      List<string> list3 = new List<string>(); 
      list3.Add("7"); 
      list3.Add("8"); 
      list3.Add("9"); 
      List<string> list4 = new List<string>(); 
      Dictionary<string, Dictionary<string, List<string>>> mainDictionary = new Dictionary<string, Dictionary<string, List<string>>>(); 
      Dictionary<string, List<string>> innerDictionary = new Dictionary<string,List<string>>(); 
      foreach (string s1 in list1) 
      { 
       foreach (string s2 in list2) 
       { 
        foreach(string s3 in list3) 
        { 
         list4.Add(s3); 
        } 
        innerDictionary.Add(s2, list4); 
        list4.Clear(); 
       } 

       mainDictionary.Add(s1, innerDictionary); 
       innerDictionary.Clear(); 
      } 
+0

什麼語言是這裏面新的字典和列表?你做了「Dictionary」類嗎? – Adeeb 2014-10-30 18:47:24

+1

'添加'不*複製*對象,但存儲對同一對象的引用。當你清除時,它會清除一個實例。相反,每次迭代創建一個「新」集合。 – crashmstr 2014-10-30 19:32:18

+0

你也對,謝謝。 – idants 2014-10-31 02:53:39

回答

1

您需要創建循環

foreach (string s1 in list1) 
{ 
    Dictionary<string,List<string>>() innerDictionary = new Dictionary<string,List<string>>(); 
    foreach (string s2 in list2) 
    { 
     List<string>() list4 = new List<string>(); 
     foreach(string s3 in list3) 
     { 
      list4.Add(s3); 
     } 

     innerDictionary.Add(s2, list4); 
    } 

    mainDictionary.Add(s1, innerDictionary); 
} 
+0

正是我想要的,謝謝你! @juharr – idants 2014-10-31 02:49:24