Здравствуйте! Я добавляю в ArrayList два объекта. Как можно получить доступ к их полям?
ArrayList arraylist = new ArrayList();
Test test = new Test();
Test2 test2 = new Test2();
arraylist.Add(test);
arraylist.Add(test2);
Пользуясь (давно устаревшим) ArrayList
, вы теряете информацию о типах положенных в него объектов. Поэтому вам придётся делать явный cast с риском ошибиться и не угадать нужный тип.
Скорее всего, вам нужен типизированный List<Test>
. В вашем примере вы записываете в список два разнородных объекта; скорее всего, вам это не нужно, вам нужно либо несколько отдельных списков, либо просто отдельные переменные (либо один из типов является подтипом другого).
list[i]
может быть любого производного типа, как компилятор может знать, какие из полей производного класса там есть? И как вы можете это знать? --- Расскажите, зачем вам доступ к полям конкретных классов в списке.
Использовать в типизированной коллекции можно так:
public class BaseClass
{
public virtual string GetAbout()
{
return "I'm BaseClass";
}
}
//======================================================
public class InheritedClass : BaseClass
{
public int Age { get; set; }
public int GetAge()
{
return this.Age;
}
public override string GetAbout()
{
return "I'm InheritedClass";
}
}
//======================================================
List<BaseClass> collect = new List<BaseClass>();
collect.Add(new InheritedClass());
collect.Add(new BaseClass());
foreach(var item in collect)
{
Console.WriteLine(item.GetAbout());
var inheritedItem = item as InheritedClass;
if(inheritedItem != null)
{
Console.WriteLine(inheritedItem.GetAge());
}
}