我在Project 用一个结构来装载一些信息             Dictionary<string, Dictionary<string, int>> dic_Total = new Dictionary<string, Dictionary<string, int>> ();            Dictionary<string, int> dic_Point = new Dictionary<string, int> ();  // 就是 dic_Total装载着dic_Point            // 在循环里面 装载满了一个 dic_Point时候将它     
              for ( int n = 0; n < 100; n++ ) {
                dic_Point.Add ( n.ToString(), n );                if ( n % 5 == 0 ) {
                    dic_Total.Add (n.ToString(), dic_Point );
                    dic_Point.Clear ();
                }            } 
            Console.Read ();   
     
     发现执行之后 dic_Total每个记录的 Value都是相等的 就是 dic_Point最后那个值 , 96,97,98,99      
     当   for ( int n = 0; n <= 100; n++ ) 时 执行了 dic_Point.Clear (); 
     然后 dic_TotalValue的东西都清空了,是 Dictionary 记住的都是地址 ?
     假如我想要存储这样结构应该怎么办? 求求解答..... 谢谢!
    
     
  
  

解决方案 »

  1.   


     Dictionary<string, Dictionary<string, int>> dic_Total = new Dictionary<string, Dictionary<string, int>> ();            Dictionary<string, int> dic_Point = new Dictionary<string, int> ();  // 就是 dic_Total装载着dic_Point            // 在循环里面 装载满了一个 dic_Point时候将它     
                for ( int n = 0; n <= 100; n++ ) {
                    dic_Point.Add ( n.ToString(), n );                if ( n % 5 == 0 ) {
                        Dictionary<string, int> dic_Point_Copy = new Dictionary<string, int> ();
                        dic_Point_Copy = dic_Point;
                        dic_Total.Add ( n.ToString (), dic_Point_Copy );
                        dic_Point_Copy.Clear ();
                        dic_Point.Clear ();
                        
                        GC.SuppressFinalize ( dic_Point_Copy );
                    }            }
                Console.Read (); 这样也不行 能提供重新分配地址的方法吗?、
      

  2.   

                Dictionary<string, Dictionary<string, int>> dic_Total = new Dictionary<string, Dictionary<string, int>> ();            Dictionary<string, int> dic_Point = new Dictionary<string, int> ();  // 就是 dic_Total装载着dic_Point            // 在循环里面 装载满了一个 dic_Point时候将它     
                for ( int n = 0; n < 100; n++ ) {
                    dic_Point.Add ( n.ToString(), n );                if ( n % 5 == 0 ) {
                        Dictionary<string, int> dic_Point_Copy = new Dictionary<string, int> ();  
                        foreach ( KeyValuePair<string, int> key in dic_Point ) {
                            dic_Point_Copy.Add ( key.Key, key.Value );
                        }
                        dic_Total.Add ( n.ToString (), dic_Point_Copy );
                        dic_Point.Clear ();                                  }            }
                Console.Read ();
      尝试了这种 是可以  但是 多了一重循环 我里面很多数据会很慢 ,求解决方法
      

  3.   


                Dictionary<string, Dictionary<string, int>> dic_Total = new Dictionary<string, Dictionary<string, int>> ();            Dictionary<string, int> dic_Point=null;// 就是 dic_Total装载着dic_Point            // 在循环里面 装载满了一个 dic_Point时候将它     
                  for ( int n = 0; n < 100; n++ ) 
                  {
                    if(dic_Point==null)
                          dic_Point = new Dictionary<string, int> ();  
                    dic_Point.Add ( n.ToString(), n );                if ( n % 5 == 0 ) 
                    {
                        dic_Total.Add (n.ToString(), dic_Point );
                        dic_Point = new Dictionary<string, int> ();                  
                   }            } 
     
      

  4.   

    上面的代码还可以精简一点:
                Dictionary<string, Dictionary<string, int>> dic_Total = new Dictionary<string, Dictionary<string, int>> ();            Dictionary<string, int> dic_Point = new Dictionary<string, int> ();  // 就是 dic_Total装载着dic_Point            // 在循环里面 装载满了一个 dic_Point时候将它     
                  for ( int n = 0; n < 100; n++ ) 
                  { 
                    dic_Point.Add ( n.ToString(), n );                if ( n % 5 == 0 ) 
                    {
                        dic_Total.Add (n.ToString(), dic_Point );
                        dic_Point = new Dictionary<string, int> ();                  
                   }            }