2017-09-08 124 views
2

我試圖將動物添加到我的動物列表中,但最後添加的動物的值將是列表中的所有動物。將對象添加到列表中,更改所有其他列表對象

List<Animal> animals = new List<Animal>(); 
public bool AddAnimal(Animal animal) 
     { 
      animals.Add(animal); 
      return true; 
     } 

Animal animal = new Animal(); 
private void btnAddAnimal_Click(object sender, RoutedEventArgs e) 
     { 
      animal.AnimalSize = Size.large; 
      animal.Carnivore = true; 
      AddAnimal(animal); 
     } 

這是列表: 大小食肉 - 大真

private void btnAddAnimal_Click(object sender, RoutedEventArgs e) 
     { 
      animal.AnimalSize = Size.large; 
      animal.Carnivore = false; 
      AddAnimal(animal); 
     } 

這是在我加入草食動物對待我的動物名單發生了:

  • 大小食肉
    • 大虛假
    • 大假
+0

C#對不起,我會添加它馬上 – daffy

+0

'animal'總是指向相同的內存地址 – izsl

回答

5

嘛,你實際上並沒有增加新的動物,你只是修改一個你。如果你想添加一個新的動物,你必須創建一個新的對象:

private void btnAddAnimal_Click(object sender, RoutedEventArgs e) 
{ 
    Animal animal = new Animal(); 
    animal.AnimalSize = Size.large; 
    animal.Carnivore = true; 
    AddAnimal(animal); 
} 
5

創建動物一次(你的方法外),然後只更改其屬性。因此,您的名單看起來是這樣的:

 +--------+ 
    +-> | Animal | 
    | +--------+ 
    | ^^
    | | | 
[0], [1], [2], ... 

它們都指向同一個動物。這顯然不是你想要的。你想要的是這樣的:

 +--------+ 
    +-> | Animal | 
    | +--------+ 
    |    +--------+ 
    |   +--> | Animal | 
    |   | +--------+ 
[0], [1], [2], ... 
     | 
     v 
     +--------+ 
     | Animal | 
     +--------+ 

爲了解決這個問題,創建一個新的動物每次:

// Animal animal = new Animal(); <-- we don't need this any more 

private void btnAddAnimal_Click(object sender, RoutedEventArgs e) 
{ 
    Animal animal = new Animal(); // <-- but we need it here 

    animal.AnimalSize = Size.large; 
    animal.Carnivore = true; 
    AddAnimal(animal); 
} 
相關問題