对象列表之间的复制
public partial class Form1 : Form
{
private student s1 = null;
List<student> listOld = null;
List<student> listNew = null;
student[] stu = null;
public Form1()
{
InitializeComponent();
}
#region
/// <summary>
/// LOAD
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
s1 = new student();
s1.Age = 19;
s1.Descriptiion = "我可是个好学生啊";
s1.Name = "吴海华";
s1.Sex = true;
listOld = new List<student>();
listOld.Add(s1);
}
#endregion
#region 复制
/// <summary>
/// 复制
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnChange_Click(object sender, EventArgs e)
{
stu = new student[listOld.Count];
listOld.CopyTo(stu);
listNew = stu.ToList<student>();
//当新的列表改变时,旧的列表的值应该不发生变化,但发生了变化,为什么?
foreach (student s22 in listNew)
{
s22.Name = this.txtChange.Text.Trim();
}
}
#endregion
}
------解决方案--------------------因为复制是一个深拷贝,即原来对像的引用也拷贝过来了,所以你可以用Clone
stu = (student[])listOld.Clone();
listNew = stu.ToList <student>();
------解决方案--------------------肯定是这样子,因为列表里存放的是引用,
两种方式解决
一是自己实现列表,控制列表的拷贝
二是把引用对象换为值类型
------解决方案--------------------引用7楼的:
肯定是这样子,因为列表里存放的是引用,
两种方式解决
一是自己实现列表,控制列表的拷贝
二是把引用对象换为值类型
这个正解,看lz的意图是要将加入listOld中的student对象复制到listNew中;
建议方法:
方法1、将student从class转化为struct类型。
方法2、为student类添加Clone方法使用类似下面的方法进行复制:
foreach(student item in listOld)
{
listNew.Add(item.Clone());
}