我正在做一个家庭作业项目,我有一个包含5个字符串的ArrayList。我知道如何选择ArrayList的项目(使用索引值)但不知道如何访问对象字符串。任何帮助都会很棒。这是我试图做的事情:
private ArrayList myComponents;
private int listIndex = 0;
myComponents = new ArrayList(); //Arraylist to hold catalog data
equipment = new Equipment(itemName, itemType, itemDetails, itemMaintenance, itemId);
myComponents.Add(equipment);
// class file is called Equipment.cs
// I know normally that equipment without the arraylist this would work:
// equipment.getitemName();
// but combining with the arraylist is being problematic.
答案 0 :(得分:1)
使用List而不是ArrayList可能会更好。 ArrayList不是强类型,这意味着您不能将数组中的事物/对象视为“设备”,而只是将它们视为一般的无聊对象。
List<Equipment> myComponents = new List<Equipment> ();
equipment = new Equipment(itemName, itemType, itemDetails, itemMaintenance, itemId);
myComponents.Add(equipment);
foreach(Equipment eq in myComponents)
{
eq.getItemName();
// do stuff here
}
如果这可以解决您的问题,请告诉我。
答案 1 :(得分:1)
ArrayList不知道(或关心)放置在哪种对象中。它将作为对象放入其中的所有内容视为对象。从ArrayList检索对象时,您需要将返回的Object引用转换为适当类型的引用,然后才能访问该类型的属性和方法。有几种方法可以做到这一点:
// this will throw an exception if myComponents[0] is not an instance of Equipement
Equipment eq = (Equipment) myComponents[0];
// this is a test you can to to check the type
if(myComponents[i] is Equipment){
// unlike the cast above, this will not throw and exception, it will set eq to
// null if myComponents[0] is not an instance of Equipement
Equipment eq = myComponents[0] as Equipment;
}
// foreach will do the cast for you like the first example, but since it is a cast
// it will throw an exception if the type is wrong.
foreach(Equipment eq in myComponents){
...
}
话虽如此,如果可能的话,你真的想要使用泛型类型。最像ArrayList的工作是List。泛型帮助在很多情况下避免所有使ArrayList代码编写和容易出错的转换。缺点当然是你不能在List中混合类型。 List不会让你在其中放入一个字符串,而一个装满了Equipment实例的ArrayList会。您试图解决的特定问题将决定哪个更有意义。
答案 2 :(得分:0)
由于数组列表中的所有项目都是“对象”,但它们实际上是Cover下的Equipment对象,因此从ArrayList检索项目时需要一种从对象到设备的方法(提示:演员)。不想放弃,因为这是家庭作业,但这应该有帮助......