http://blog.csdn.net/yhm_js/archive/2011/01/16/6144106.aspx

解决方案 »

  1.   

    他没有给你看代码
    只是一个URL
      

  2.   

    public class Department
        {
            public List<Data> BakDatas = new List<Data>();   
     }你method.Datas = dept.BakDatasInitInstance(); //你已经给method.Datas 传递了一个空的List<Data>地址
    List<Data> BackDatas = initBackDatas();//你又new了一个List<Data>
    dept.BakDatas = BackDatas.ToList();//你把新的List地址给了dept,此时method.Datas的旧地址跟你的新List的地址有半毛钱关系??
    dept.BakDatas.Clear();
    dept.BakDatas.AddRange(BackDatas );//还是原先Dept分配到的地址
      

  3.   

    顺带说下这跟 ToList貌似没半毛钱关系....另外你可以是下
    BackDatas 和 BackDatas.ToList()是不是指向同一个引用
      

  4.   


            #region ListToDataTable
            /// <summary>
            /// ListToDataTable
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="list"></param>
            /// <returns></returns>
            public static DataTable ToDataTable<T>(this IEnumerable<T> list)
            {
                List<PropertyInfo> pList = new List<PropertyInfo>();
                Type type = typeof(T);
                DataTable dt = new DataTable();
                Array.ForEach<PropertyInfo>(type.GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, p.PropertyType); });
                foreach (var item in list)
                {
                    DataRow row = dt.NewRow();
                    pList.ForEach(p => row[p.Name] = p.GetValue(item, null));
                    dt.Rows.Add(row);
                }
                return dt;
            }
            #endregionListToDataTable可以参考一下
      

  5.   

     dept = new Department();
                method = new Method();
                method.Datas = dept.BakDatas;楼主你上面这句,你实例化以后个数不是为0嘛,你赋值有用嘛。你后面以没有给method.Datas赋其他的值。
    你把这句method.Datas = dept.BakDatas;
    移动到btnTestAdd_Click事件里面的dept.BakDatas = BackDatas.ToList();
    这句后面,就不会出现这种情况了
      

  6.   

    谢谢各位的阅读:
    @starfd:正解@a13062331830:.ToList()会新开辟一个内存空间,问题的本质在于此,而不是移动代码这个原因,不然我怎么会写两个测试代码,让大家比较呢,请细看!结贴::.net中ToList()会新开辟一个内存空间,大家用时请注意