我想知道是否有可能在c#中使用foreach,它仅关注从列表类型继承的特定类型的对象? 我试过了,但是有一个转换错误:(B继承自A)
list<A> myAs;
class B:A{}
foreach (B b in myAs)
{
//do something
}
谢谢
答案 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
}