Доступ к полям объектов в ArrayList C#

Рейтинг: 0Ответов: 2Опубликовано: 21.12.2014

Здравствуйте! Я добавляю в ArrayList два объекта. Как можно получить доступ к их полям?

ArrayList arraylist = new ArrayList();
Test test = new Test();
Test2 test2 = new Test2();

arraylist.Add(test);
arraylist.Add(test2);

Ответы

▲ 2Принят

Пользуясь (давно устаревшим) ArrayList, вы теряете информацию о типах положенных в него объектов. Поэтому вам придётся делать явный cast с риском ошибиться и не угадать нужный тип.

Скорее всего, вам нужен типизированный List<Test>. В вашем примере вы записываете в список два разнородных объекта; скорее всего, вам это не нужно, вам нужно либо несколько отдельных списков, либо просто отдельные переменные (либо один из типов является подтипом другого).

▲ 1

Использовать в типизированной коллекции можно так:

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());
    }
}