2010-10-18 23 views
2

J'ai 3 classes différentes, une classe "entity" générique, et puis deux classes qui héritent de ceci, une classe de balle et une classe ennemie. J'ai alors une liste de la classe d'entité, avec les puces et les ennemis dans la liste, et beaucoup d'endroits que je traite les mêmes. Cependant, parfois, je veux boucler juste une des classes, et pas l'autre, par ex. Boucle à travers chaque balle, mais pas les ennemis. Est-ce qu'il y a un moyen de faire ça?C# - Pouvez-vous parcourir les types séparément dans une liste générique?

J'ai essayé

foreach (Bullet tempBullet in entities) 

Mais je reçois l'erreur

Impossible de jeter l'objet de type 'ennemi' taper 'Bullet'.

Quelqu'un sait si c'est possible ou dois-je utiliser des listes séparées?

Répondre

5

Vous pouvez probablement utiliser un peu Linq:

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

} 
+0

Merci, ça a l'air de marcher! – Darkfrost

1

Si vous utilisez .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 
    } 
} 

ou, en utilisant LINQ (et entities est un objet qui hérite IEnumerable<T>):

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

Ou vous pouvez utiliser aussi si (ent est Enemy) ... – jv42

+0

Mais alors vous faites deux lancers, comme vous le feriez probablement un '(Enemy) ent' plus tard. – thecoop