C # - Можете ли вы проходить через типы отдельно в общем списке? - PullRequest
2 голосов
/ 18 октября 2010

У меня есть 3 разных класса, общий класс «сущности», а затем два класса, которые наследуют это, класс пули и класс врага.

Затем у меня есть список класса сущностей с пулями и врагами в списке, и многие места, к которым я отношусь, одинаковы. Тем не менее, иногда я хочу просмотреть только один из классов, а не другой, например. Цикл каждой пули, но не врагов. Есть ли способ сделать это?

Я пытался

foreach (Bullet tempBullet in entities)

Но я получаю ошибку

Невозможно привести объект типа «Враг» к типу «Пуля».

Кто-нибудь знает, возможно ли это, или я должен использовать отдельные списки?

Ответы [ 2 ]

5 голосов
/ 18 октября 2010

Вы, вероятно, можете использовать маленький Linq:

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

}
1 голос
/ 18 октября 2010

Если вы используете .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
}
...