在我的阵列中发生了一个名为" animals"的不合逻辑的变化。每当我更改数组中的一个元素时,所有其他元素都会随之更改。我不知道为什么会这样。
当我运行下面的程序时,控制台会写
Sugar, Dog
Sugar, Dog
那应该不会发生。我应该得到
Fluffy, Cat
Sugar, Dog
请查看以下相关代码:
//Program.cs
namespace AnimalProgram
{
class Program
{
static void Main(string[] args)
{
AnimalInfo vitalStats = new AnimalInfo("vital statistics", new string[] { "name", "sex", "species", "breed", "age" }); //name, species, breed, sex, age.
AnimalInfo veterinarian = new AnimalInfo("veterinarian", new string[] { "Vet Name", "Name of Vet's Practice" });
List<AnimalInfo> animalStats = new List<AnimalInfo> {vitalStats, veterinarian };
Animal cat1 = new Animal();
Animal dog1 = new Animal();
Animal[] animals = new Animal[2] { cat1, dog1};
for(int i = 0; i < animals.Count(); i++) animals[i].initializeAnimalInfo(animalStats);
AnimalInfo cat1vitals= new AnimalInfo("vital statistics", new string[] { "Fluffy", "F", "Cat", "American Shorthair", "5" });
AnimalInfo dog1vitals = new AnimalInfo("vital statistics", new string[] { "Sugar", "F", "Dog", "Great Dane", "7" });
AnimalInfo cat1vet = new AnimalInfo("veterinarian", new string[] { "Joe Schmoe", "Joe's Veterinary" });
AnimalInfo dog1vet = new AnimalInfo("veterinarian", new string[] { "Jim Blow", "Jim's Garage" });
cat1.UpdateAnimalInfo(new List<AnimalInfo>() { cat1vitals, cat1vet });
dog1.UpdateAnimalInfo(new List<AnimalInfo>() { dog1vitals, dog1vet });
Console.WriteLine(cat1.animalProperties[0].info[0] + ", " + cat1.animalProperties[0].info[2]);
Console.WriteLine(dog1.animalProperties[0].info[0] + ", " + dog1.animalProperties[0].info[2]);
Console.ReadLine();
}
}
}
//Animal.cs
using System.Collections.Generic;
using System.Linq;
namespace AnimalProgram
{
class Animal
{
public List<AnimalInfo> animalProperties;
public Animal() { }
public void initializeAnimalInfo(List<AnimalInfo> aInfo)
{
animalProperties = aInfo;
}
public void UpdateAnimalInfo(List<AnimalInfo> targetInfo)
{
for (int i = 0; i < targetInfo.Count(); i++)
animalProperties[i].info = targetInfo[i].info;
}
}
}
//AnimalInfo.cs
namespace AnimalProgram
{
public class AnimalInfo
{
public string infoName;
public string [] info;
public AnimalInfo(string iName, string [] information)
{
infoName = iName;
info = information;
}
}
}
答案 0 :(得分:1)
使用相同的对象初始化animalStats
。因此,狗和猫保持共享一组属性。
您应该为每个对象创建自己的属性:
for(int i = 0; i < animals.Count(); i++) {
AnimalInfo vitalStats = new AnimalInfo("vital statistics", new string[] { "name", "sex", "species", "breed", "age" }); //name, species, breed, sex, age.
AnimalInfo veterinarian = new AnimalInfo("veterinarian", new string[] { "Vet Name", "Name of Vet's Practice" });
List<AnimalInfo> animalStats = new List<AnimalInfo> {vitalStats, veterinarian };
animals[i].initializeAnimalInfo(animalStats);
}