我有3个不同的类,一个通用的“实体”类,然后是两个继承它的类,一个子弹类和一个敌人类。
然后我有一个实体类的列表,列表中的子弹和敌人,以及我对它们进行相同处理的很多地方。但是,有时候,我想只遍历其中一个类,而不是另一个类,例如循环穿过每个子弹,但不是敌人。有没有办法做到这一点?
我试过
foreach (Bullet tempBullet in entities)
但是我收到了错误
无法将“Enemy”类型的对象强制转换为“Bullet”。
任何人都知道这是否可行,或者我是否必须使用单独的列表?
答案 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
}