以下代码似乎向列表中添加了一条新记录,但会用最后创建的记录覆盖所有记录。
我可以让它正常工作...
lpr.Add(new personRecord(){Age = pr.Age,Name = pr.Name});
但这似乎更冗长,并且在真正的应用程序中记录要大得多。
private void button1_Click(object sender, EventArgs e)
{
personRecord pr = new personRecord();
List<personRecord> lpr = new List<personRecord>();
pr.Age = 40;
pr.Name = "Bob";
lpr.Add(pr);
pr.Age = 30;
pr.Name = "Steve";
lpr.Add(pr);
pr.Age = 44;
pr.Name = "Phil";
lpr.Add(pr);
pr.Age = 33;
pr.Name = "Sue";
lpr.Add(pr);
}
public class personRecord
{
private int age;
private string name;
public int Age
{
get { return age; }
set { age = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
}
pr
is a 参考到一个物体。当您更改值时pr
你正在改变的价值观同一个物体并将该引用添加到列表中。因此,您的列表由对同一对象的多个引用组成,每个引用都将反映您设置的最后一个值。
您可以通过添加来解决它
pr = new personRecord();
在每个块之前确保pr
正在引用一个new每次都反对。
当你这样做时
lpr.Add(new personRecord(){Age = pr.Age,Name = pr.Name});
您正在添加对new对象并仅复制单个对象中的值pr
参考。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)