2015-11-02 72 views
0

这是我的类,名为“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(); 

后I输入 “温度” 的值,我它存储到列表:

List<Objek> Objek = new List<Objek>();Objek.Add(temp); 问题是每当我改变元素的属性值(例如:Objek[0].Warna = Color.Red)中的一个存储多于1“TEMP”对象之后,所有Objek[0, 1, ..., n].Warna也改变为红色。

有人可以解释我在这些代码中哪里是我的错?

+5

你存储在你的列表中Objek'的'同一实例的多个引用,没有创造Objeck'的'多个实例,他们每个人存储在列表中。 –

+0

你可以在这里添加'form1.cs'的相关代码吗?特别是当你增加价值的部分,因为现在我们只能推测你的问题的原因。它看起来很可能是你添加相同的对象,而不是一个不同的... – Fabjan

回答

1

听起来像你正在向列表中添加相同的对象引用。在方法内部移动Objek temp = new Objek();,以便每次都创建一个新对象,否则每次调用此方法时,都会使用/添加相同的对象

enter image description here

+0

但在我的代码中,我使用多个方法。我们正在讨论的对象“临时”与多种方法一起使用。你能给我任何解决方案吗?谢谢 –

+0

然后,每次你需要创建一个新的对象来修改时,你需要通过写入来替换你的临时对象:temp = new Objek(); – FailedUnitTest

0

听起来像您正在存储对同一对象的多个引用。