2015-11-02 74 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

聽起來像您正在存儲對同一對象的多個引用。