複製
列挙可能なコレクション (辞書内の IList または KeyValuePairs など) をループしているときに、オブジェクトを削除できないことを回避できるようにするための適切なパターンを誰かに教えてください。
たとえば、次の例は foreach 中に列挙されているリストを変更するため、失敗します。
foreach (MyObject myObject in MyListOfMyObjects)
{
if (condition) MyListOfMyObjects.Remove(myObject);
}
過去に私は2つの方法を使用しました。
foreach を逆の for ループに置き換えました (オブジェクトを削除した場合にループしているインデックスを変更しないようにするため)。
また、ループ内で削除するオブジェクトの新しいコレクションを保存してから、そのコレクションをループして、元のコレクションからオブジェクトを削除しようとしました。
これらは問題なく機能しますが、どちらも気分が良くありません。誰かが問題に対するよりエレガントな解決策を思いついたのではないかと思っていました