这是我的班级名为" Objek"。
public class Objek
{
public int id;
public int tipe;
public int bentuk;
public List<int> x { get; set; }
public List<int> y { get; set; }
public int xC { get; set; }
public int yC { get; set; }
public Color Warna { get; set; }
public Objek()
{
this.Warna = Color.Black;
this.x = new List<int>();
this.y = new List<int>();
}
public Objek(int tipe, int bentuk)
{
this.tipe = tipe;
this.bentuk = bentuk;
this.Warna = Color.Black;
this.x = new List<int>();
this.y = new List<int>();
}
}
然后在form1.cs中我全局声明(在任何方法之外):
Objek temp = new Objek();
输入&#34; temp&#34;的值后,我将其存储到List:
<{>List<Objek> Objek = new List<Objek>();
与Objek.Add(temp);
问题是每当我在存储超过1&#34; temp&#34;之后我改变了一个元素的属性值(例如:Objek[0].Warna = Color.Red
)。对象,所有Objek[0, 1, ..., n].Warna
也更改为红色。
有人能解释一下我在这些代码中的错吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
听起来你正在存储对同一个对象的多个引用。
答案 2 :(得分:0)
您要多次插入同一个对象,因此您只有1个对象多次插入列表,因此更改一个会全部更改。您应该复制对象或创建多个。这可以使用ICloneable https://msdn.microsoft.com/en-us/library/system.icloneable(v=vs.110).aspx,像AutoMapper http://automapper.org/这样的库来完成,或者只是创建一个新对象。