foreach(list <A>中的B),其中B从A继承

时间:2019-10-06 19:25:57

标签: c#

我想知道是否有可能在c#中使用foreach,它仅关注从列表类型继承的特定类型的对象? 我试过了,但是有一个转换错误:(B继承自A)

list<A> myAs;
class B:A{}    
foreach (B b in myAs)
    {
       //do something
    }

谢谢

3 个答案:

答案 0 :(得分:1)

您可以使用LINQ的OfType扩展方法。它将返回一个仅具有指定类型元素的新IEnumerable实例:

foreach (B b in myAs.OfType<B>()) {
    // do something
}

答案 1 :(得分:0)

您需要迭代A列表中的B实例。因此,列表A包含多个基于A的类型。您必须先过滤列表,然后迭代或使用IEnumerable.OfType(System.Linq名称空间)方法。

foreach (B b in myAs.OfType<B>())
{
   //do something
}

答案 2 :(得分:0)

您可以像通常的As列表一样循环访问它,但是还要检查它们是否为B。如果没有,请继续:

class A {}
class B : A {}
List<A> MyList;

foreach (A myA in MyList)
{
 if (!(myA is B))
  continue;

 // TODO
}

或改用LINQ({TypeOf,如另一个答案所述):

foreach (B myB in MyList.OfType<B>())
{
 // TODO
}