好吧,所以這可能是一個奇怪的問題,但這裏有。以下代碼是 非常通用的僞代碼,但這將在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>();
然後你已經給它添加了一些動物,比如狗,貓和魚。但是現在,你想用不同的魚來代替魚,所以你這樣做:
animalList[0].getSpecificAnimal(ref animalList, Fish,ref whichAnimal);
animalList[0].replaceSpecifiAnimal(ref animalList,newFish,whichAnimal);
這將用新的取代舊的魚。
所以現在回答這個問題:在列表中使用某些東西來修改列表有什麼危險?
此代碼,以及它的真實版本,工作。它編譯和運行得很好。但我只是 不禁感覺,如果我正在追求一個危險,而不僅僅是一點混淆。應該注意到 即使(在這種情況下)魚在索引零中,代碼也能工作。
我按照自己的方式對此進行了編碼。我可以把對animalList的方法作爲一個不同的類,但是不這樣做的好處是我可以傳遞animalList(一旦它被填充),並且它是全部自包含的。
想法?
爲什麼你使用'ref'? –
首先你爲什麼要用'ref'? –
你確定你明白'ref'的用途嗎? – Arran