繁体   English   中英

foreach在超类列表中继承(子类)对象

[英]foreach inherited (sub-class) object in a super-class list

我有一个名为“ClassA”的超类和两个子类“Class1”和“Class2”。

我有一个包含“Class1”和“Class2”对象的列表,该列表的类型为“ClassA”。
我想通过做类似的事情来遍历列表中的“Class1”对象

List<ClassA> AList = new List<ClassA>;
AList.Add(new Class1());
AList.Add(new Class2());

foreach (Class1 c1 in AList)
{
    // Do Something
}

但是当我这样做时,代码在到达不属于“Class1”类型的对象时会抛出异常。

如何以简单的方式完成此操作,而无需检查列表中对象的类型,如果它是正确的类型,则将其强制转换。 像这样:

foreach (ClassA cA in AList)
{
    if (cA.GetType() == typeof(Class1))
    {
        // Do Something
    }
}

使用LINQ:

foreach (Class1 c1 in AList.OfType<Class1>()) { }

请注意,如果要检查循环中的类型,则asis运算符就是为此而设的。 喜欢:

foreach (ClassA cA in AList) {
  Class1 c1 = cA as Class1;
  if (c1 != null) {
    // do something
  }
}
foreach(Class1 c1 in AList.OfType<Class1>())
{
    //do something
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM