这可能被认为是糟糕的编程,但在 .net 4 之前,我曾经大量使用类似这样的代码:
enemyList.ForEach(delegate(Enemy e)
{
e.Update();
if (someCondition)
enemyList.Remove(e);
});
现在,我正在更新一些旧项目,自从 ForEach 被删除以来,有很多代码需要更改。现在,我确实有一个扩展程序允许我使用 ForEach :
public static void ForEach<T>(this IEnumerable<T> sequence, Action<T> action)
{
if (sequence == null) throw new ArgumentNullException("sequence");
if (action == null) throw new ArgumentNullException("action");
foreach (T item in sequence)
action(item);
}
我知道我可以这样做:
var index = 0;
while(index < enemyList.Count)
{
if(condition)
enemyList.RemoveAt(index);
else
index++;
}
但是其中一些这样重写会很痛苦..有没有办法重新添加该功能,以便我可以遍历该列表,删除我需要的项目而无需返回并重写和编辑所有这些功能? 我仍然认为自己是编码的新手,我只是想不通这个..任何帮助将不胜感激!
** * ** * ***编辑** * ** * ** *
所以我想归结为重写很多代码。我有很多这样的代码,我刚刚从一个项目中提取出来:
GameplayScreen.gameWorld.shipList.ForEach(delegate(Ship s)
{
if (eS.originalShipsID == s.shipID)
{
if (!eS.Alive || eS.health <= 0)
{
// this one sunk...
string log = "0" + s.shipName + " was sunk in battle.. All crew and cargo were lost.";
AddLogEntry(log);
totalCrewLost += s.currentCrew;
GameplayScreen.gameWorld.shipList.Remove(s);
}
}
});
我只是希望有一种方法不必重写所有这些。所以是时候更新和改变我的编码方式了。谢谢!