在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;
}