配列の巡回を持った言語ならC#に限らない話だと思うのですが、
foreach中に配列の要素を消したい時、一番スマートなやり方としてはどんな物が有るでしょうか?
 どうしてもforeachが2回以上必要な気がします。
 プログラミングがうまい人ならもっとマシな方法をしていませんでしょうか?
下に目的の代換えソースを書いてみました。


//あまり綺麗では無いと思う例---
/*
 「予期しない動作を防ぐため、コレクション内容の変更には使用しないでください。」という制限の為
削除する要素へのキーを別途用意した配列に入れてその配列を"又"foreachしています。
*/
foreach(OBJ val in table)
{
 if (val.needDel) delArray.Add(val.key);
}

foreach(key key in delArray) //
{
 table.Remove(key)
}
delArray.Clear()