好的,所以这可能是一个奇怪的问题,但这里有。以下代码是非常通用的伪代码,但这将在 C# 中完成。
假设你有一个类如下:
public class Animal()
{
various methods and members here...
public Animals getSpecificAnimal(ref animalList,animalType, ref int whichAnimal)
{
//The logic in here will find your specifi animal, as well as the index of it in the list
return Animal;
}
public void replaceSpecifiAnimal(ref animalList,Animal newAnimal, int whichAnimal)
{
//The assumption here is that you know the index of the specific animal you
//want to replace in the list.
animalList.RemoveAt(whichAnimal);
animalList.Add(newAnimal);
}
}
public class Cat:Animal
{
}
public class Dog:Animal
{
}
public class Fish:Animal
{
}
现在,您已在这些动物列表中创建如下,并在某个类中使用它:
var animalList = new List<Animal>();
然后你添加了一些动物,比如狗、猫和鱼。但是,现在您想用不同的鱼替换 Fish,所以您可以这样做:
animalList[0].getSpecificAnimal(ref animalList, Fish,ref whichAnimal);
animalList[0].replaceSpecifiAnimal(ref animalList,newFish,whichAnimal);
这将用新鱼代替你的旧鱼。
所以现在问题是:使用列表中的某些内容来修改列表有什么危险?
这段代码,嗯......它的真实版本,有效。它编译并运行得很好。但我不禁觉得我在寻求一种危险,而不仅仅是一点点混淆。应该注意的是,即使(在这种情况下)Fish 的索引为零,该代码也可以工作。
我以这种方式编码是有原因的。我可以将作用于animalList 的方法放在不同的类中,但不这样做的好处是我可以传递animalList(一旦它被填充),而且它都是自包含的。
想法?