最近、私はこのようなコードをたくさん書いてきた:C#リスト<T>からアイテムを削除すると、他のアイテムの注文は保持されますか?
List<MyObject> myList = new List<MyObject>();
...
for(int i = 0; i < myList.Count; ++i)
{
if(/*myList[i] meets removal criteria*/)
{
myList.RemoveAt(i);
--i; //Check this index again for the next item
//Do other stuff as well
}
}
をし、私は多分リストは除去でオブジェクトの順序を保持しません少し偏執的になりました。私は確かに知るのに十分にC#仕様を知らない。誰かが私がこのパターンに悩まされているかどうかを確認することができますか?
EDIT:おそらく、私は上記のことが非常に単純化された例であり、アイテムを削除する必要がある場合はもっと多くの事柄が発生するので、ここではList<T>.RemoveAll()
がひどく当てはまるとは思わないでしょう。それは素晴らしい機能ですが。上記のブロックif()
にコメントを追加しました。
ちょっとした注意:フォワードではなく、リストを逆順にループする必要があります。リスト[1](i = 1)を削除したとします。これにより、リスト[2]の要素がリスト[1]にあるリストがシフトします。今、あなたがi = 2にジャンプすると、リスト[1]にある要素をスキップしました。 –
RemoveAll()メソッドでこのパターンを大幅に簡略化できるはずです –
なぜそれに対してlinqを使用しないのですか? – Andre