选择ArrayList中包含的对象

时间:2009-11-20 16:56:21

标签: c# object arraylist

我正在做一个家庭作业项目,我有一个包含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.

3 个答案:

答案 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检索项目时需要一种从对象到设备的方法(提示:演员)。不想放弃,因为这是家庭作业,但这应该有帮助......