C#list复制问题

在C#中list列表或者是list实体类,分为深复制与浅复制。
浅复制时,当复制的list值发生变化,原数据源也会发生变化。
test:
实体类:stu
public class stu{
public stu(){}
private string _id;
private string _name;
private string _sex;

    /// 
    /// ID
    /// 
    public string ID
    {
        set { _id = value; }
        get { return _id; }
    }
    /// 
    /// 姓名
    /// 
    public string Name
    {
        set { _name = value; }
        get { return _name; }
    }
    /// 
    /// 性别
    /// 
    public string Sex
    {
        set { _sex = value; }
        get { return _sex; }
    }

}
页面测试:
public void Search(){
//原数据类
List oldlist = new List();
//添加假数据
stu te = new stu();
te.ID = "1";
te.Name = "张三";
te.Sex = "女";
oldlist.add(te);
//新数据类
List newstu = new List();
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);
///


/// list实体类深复制
///

/// 需要复制的实体类。根据复制的实体类给每个属性复制
///
public List CopyList(List copyList)
{
List list = new List();

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

你可能感兴趣的:(C#list复制问题)