Дифференцировать дочерний класс от списка родительских - PullRequest
0 голосов
/ 30 января 2019

Мне нужно выделить детей в списке родителей.У меня есть родительский список

List<Parent> all = new List<Parent>();

Parent c1 = new Child1();
Parent c2 = new Child2();

all.add(c1);
all.add(c2);

. Есть ли способ проверить, являются ли элементы в списке Child1 или Child2?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Если вы хотите перебрать список и сделать что-то в зависимости от типа элемента, вы можете сделать что-то вроде этого:

foreach(var item in list)
{
    if(item is Child1)
    {
        var child1 = (Child1)item;
        child1.DoSomething();
    }
    else if(...)
    {
        ...
    }
}

, если вы используете c # 7, тогда вы можете сделать это лучше, напрямую создав временную переменную.в операторе if:

foreach(var item in list)
{
    if(item is Child1 child1)
    {
        child1.DoSomething();
    }
    else if(...)
    {
        ...
    }
}

или вы можете использовать оператор as, как показано ниже:

foreach(var item in list)
{
    var child1 = item as Child1;
    if(item != null)
    {
        child1.DoSomething();
    }
    var chil2 = item as Child2;
    ...
}
0 голосов
/ 30 января 2019

Неясно, хотите ли вы знать, принадлежат ли все элементы определенного типа или одному из 2 типов.

Чтобы определить, являются ли все элементы Child1 экземплярами:

all.All(item => (item is Child1))

Чтобы определить, являются ли все элементы экземплярами Child1 или Child2:

all.All(item => (item is Child1) || (item is Child2))
...