从父列表中区分子 class

Differentiate child class from the list of parent

我需要区分父项列表中的子项。 我有一个家长名单

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

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

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

有什么方法可以检查列表中的项目是 Child1 还是 Child2?

不清楚您是想知道这些项目是全部属于某种类型还是全部属于这两种类型之一。

判断所有项目是否都是Child1个实例:

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

要确定所有项目是 Child1 还是 Child2 实例:

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

如果你想遍历列表并根据项目类型做一些事情,你可以这样做:

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;
    ...
}