如何正确删除列表中的对象?

时间:2014-07-26 19:32:42

标签: c# list

嗨,不幸的是,我没有相应的链接,但我最近读了一些c#作弊表。其中一个人说,在使用forforeach进行迭代时,不会从列表中删除对象。实际上,编译器甚至不允许您在foreach中迭代它时从列表中删除对象。但是你可以在for循环中轻松完成。

假设我有一个接口IEnemy,它有一个返回boolean的方法。

public interface IEnemy
{
 bool IsDead();
}

在其他一些课程中,我有一个列表List<IEnemy> enemies;。现在这就是我如何从列表中删除所有死亡的敌人:

public void RemoveDead(List<IEnemy> enemies) 
        {
            for (int i = 0; i < enemies.Count;i++ )
            {
                if(enemies[i].IsDead() == true)
                {
                    enemies.Remove(enemies[i]);
                }
            }
        }

但正如这张备忘单所说这是不好的做法。那怎么会这样做呢?我猜这可以通过一些LINQ语句,Lambda表达式完成吗?这是不是真的,这不应该在for - 循环中完成?

1 个答案:

答案 0 :(得分:10)

使用List<T>.RemoveAll方法

enemies.RemoveAll(enemy => enemy.IsDead());