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分配到的地址
只是一个URL
{
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分配到的地址
BackDatas 和 BackDatas.ToList()是不是指向同一个引用
#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可以参考一下
method = new Method();
method.Datas = dept.BakDatas;楼主你上面这句,你实例化以后个数不是为0嘛,你赋值有用嘛。你后面以没有给method.Datas赋其他的值。
你把这句method.Datas = dept.BakDatas;
移动到btnTestAdd_Click事件里面的dept.BakDatas = BackDatas.ToList();
这句后面,就不会出现这种情况了
@starfd:正解@a13062331830:.ToList()会新开辟一个内存空间,问题的本质在于此,而不是移动代码这个原因,不然我怎么会写两个测试代码,让大家比较呢,请细看!结贴::.net中ToList()会新开辟一个内存空间,大家用时请注意