2010-10-18 2 views
2

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

У меня тогда есть список класса сущности, с пулями и врагами в списке, и много мест, которые я рассматриваю их одинаково. Однако несколько раз я хочу пропустить только один из классов, а не другой, например. Прокрутите каждую пулю, но не врагов. Есть какой-либо способ сделать это?

Я попытался

foreach (Bullet tempBullet in entities) 

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

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

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

ответ

5

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

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

} 
+0

Спасибо, похоже, что сработало! – Darkfrost

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 
} 
+1

Или вы могли бы использовать также, если (ent is Enemy) ... – jv42

+0

Но тогда вы делаете две броски, так как вы предположительно делаете «(Враг)» позже. – thecoop

Смежные вопросы