在C#中list列表或者是list实体类,分为深复制与浅复制。
浅复制时,当复制的list值发生变化,原数据源也会发生变化。
test:
实体类:stu
public class stu{
public stu(){}
private string _id;
private string _name;
private string _sex;
/// <summary>
/// ID
/// </summary>
public string ID
{
set { _id = value; }
get { return _id; }
}
/// <summary>
/// 姓名
/// </summary>
public string Name
{
set { _name = value; }
get { return _name; }
}
/// <summary>
/// 性别
/// </summary>
public string Sex
{
set { _sex = value; }
get { return _sex; }
}
}
页面测试:
public void Search(){
//原数据类
List<stu> oldlist = new List<stu>();
//添加假数据
stu te = new stu();
te.ID = "1";
te.Name = "张三";
te.Sex = "女";
oldlist.add(te);
//新数据类
List<stu> newstu = new List<stu>();
newstu = oldstu;
for (int i = 0; i < newstu.Count; i++)
{
newstu[i].ID = "123";
newstu[i].Name = "123";
te.Sex = " 男";
}
}
这个时候,oldstu里面的数据已经改变。这个时候的list就属于浅复制。
因为两个list数据源调用属于一个地址,所以当newstu改变值时,oldstu的值也会改变。
list的深复制,不会改变原数据源。调用此方法即可
newstu = copyList(oldstu);
/// <summary>
/// list实体类深复制
/// </summary>
/// <param name="originalList">需要复制的实体类。根据复制的实体类给每个属性复制</param>
/// <returns></returns>
public List<stu> CopyList(List<stu> copyList)
{
List<stu> list = new List<stu>();
foreach (stu obj in originalList)
{
stu s = new stu();
s.ID = obj.ID;
s.Name = obj.Name;
s.Sex= obj.Sex;
list.Add(s);
}
return list;
}