我正在尝试将动物添加到我的动物列表中,但最后添加的动物的值将是列表中的所有动物。
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 :(得分:5)
好吧,你实际上并没有添加一个新的动物,你只是在修改你拥有的动物。如果要添加新动物,则必须创建新对象:
private void btnAddAnimal_Click(object sender, RoutedEventArgs e)
{
Animal animal = new Animal();
animal.AnimalSize = Size.large;
animal.Carnivore = true;
AddAnimal(animal);
}
答案 1 :(得分: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);
}