[英]Using same objects of the class, but with different members
好的,所以我想在一个类中使用五次相同的对象。 它们都具有相同的属性,但是它们只是多次出现。
for(int i=0;i<5;i++){
army1.Add(monkey);
army1.Add(flyingMonkey);
army1.Add(wizard);
army1.Add(balloon);
}
Troops类包含两个属性:Name和Health。 我希望所有的猴子都具有不同的实例,但又不要做出不同的变量(例如monkey1,monkey2)或不使用数组。 所有的猴子都受到不同程度的伤害,但是现在,伤害正在累积。
输出不同的原因是填充Troop
对象列表的方式:
for(int i=0;i<5;i++){
army1.Add(monkey);
army1.Add(flyingMonkey);
army1.Add(wizard);
army1.Add(balloon);
}
您将通过五个迭代循环执行此操作。 因此,您的每个Troop
实例都会被添加到列表中五次 (留下带有20个元素的army1
列表)。 因此,每个Troop
元素必须删除五次,直到不再在列表中。
只需删除循环,代码2中得到的行数将与代码1中生成的行数匹配:
army1.Add(monkey);
army1.Add(flyingMonkey);
army1.Add(wizard);
army1.Add(balloon);
话虽如此,在循环中添加单位不一定是错误的。 在阅读代码时,我首先想到的是,您正在尝试创建一支包含数个相同类型单位的军队(四只猴子,四只飞行的猴子,四个巫师和四个气球)。
您可以这样做,但是请注意,这样做的方式是,您的军队不会包含四只不同的猴子,而是四只相同的猴子,因为您要添加同一对象实例四次。 当减少其中之一的运行状况时,您会看到该变化反映在同一类型的其他三个项目中。
要生成具有多个相同类型单位的军队,您还必须在每次迭代中创建单位,而不是将相应的初始化代码放入循环中:
for(int i=0;i<5;i++){
Troop monkey = new Troop();
Troop flyingMonkey = new Troop();
Troop wizard = new Troop();
Troop balloon = new Troop();
monkey.name = "Monkey " + i;
flyingMonkey.name = "Flying Monkey " + i;
wizard.name = "Wizard " + i;
balloon.name = "Balloon " + i;
monkey.health = 50;
flyingMonkey.health = 50;
wizard.health = 60;
balloon.health = 55;
army1.Add(monkey);
army1.Add(flyingMonkey);
army1.Add(wizard);
army1.Add(balloon);
}
编辑:顺便说一句,在您的代码和类的当前阶段,您可以轻松编写此代码,而无需任何变量来创建单个部队:
for (int i=0; i<5; i++){
army1.Add(new Troop
{
name = "Monkey " + i,
health = 50
});
army1.Add(new Troop
{
name = "Flying Monkey " + i,
health = 50
});
army1.Add(new Troop
{
name = "Wizard " + i,
health = 60
});
army1.Add(new Troop
{
name = "Balloon " + i,
health = 55
});
}
您有4组向导,猴子,飞行猴子和气球(20个部队物品)。
for(int i=0;i<5;i++)
{
army1.Add(monkey);
army1.Add(flyingMonkey);
army1.Add(wizard);
army1.Add(balloon);
}
这意味着他们每个人必须死4次,然后才能再次露面。 但是在您的非Class代码中,您只有4个。
var health = new List<int>() {50,50,60,55};
这就解释了为什么向导会在非类代码中早死,而又不断返回(嗯,实际上,它不是向导的另一个实例)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.