C# - 你能在通用列表中单独循环遍历类型吗?

时间:2010-10-18 10:03:55

标签: c# foreach generic-list

我有3个不同的类,一个通用的“实体”类,然后是两个继承它的类,一个子弹类和一个敌人类。

然后我有一个实体类的列表,列表中的子弹和敌人,以及我对它们进行相同处理的很多地方。但是,有时候,我想只遍历其中一个类,而不是另一个类,例如循环穿过每个子弹,但不是敌人。有没有办法做到这一点?

我试过

foreach (Bullet tempBullet in entities)

但是我收到了错误

  

无法将“Enemy”类型的对象强制转换为“Bullet”。

任何人都知道这是否可行,或者我是否必须使用单独的列表?

2 个答案:

答案 0 :(得分:5)

你可以使用一点Linq:

foreach (var bullet in entities.OfType<Bullet>())
{

}

答案 1 :(得分:1)

如果您使用的是.NET 2:

foreach (Entity ent in entities) {
    Enemy e = ent as Enemy;
    Bullet b = ent as Bullet;

    if (e != null) {
        // process enemy
    }
    else if (b != null) {
        // process bullet
    }
}

或者,使用linq(entities是继承IEnumerable<T>的对象):

foreach (Bullet bullet in entities.OfType<Bullet>()) {
    // process bullets only
}