これは悪いプログラミングと見なされるかもしれませんが、.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);
}
}
});
そのすべてを書き直す必要がない方法があることを望んでいました..だから、どうやらコーディング方法を更新して変更する時が来ました。ありがとう!