ジェネリックリストから反復処理中に要素を削除するにはどうすればよいでしょうか? 質問する

ジェネリックリストから反復処理中に要素を削除するにはどうすればよいでしょうか? 質問する

それぞれ処理する必要があり、結果に応じてリストから削除される要素のリストを操作するための、より良いパターンを探しています。

.Remove(element)を の内部で使用することはできませんforeach (var element in X)(例外が発生するため)。また、に対するコレクション内の現在の位置が混乱するため、 とCollection was modified; enumeration operation may not execute.を使用することもできません。for (int i = 0; i < elements.Count(); i++).RemoveAt(i)i

これをエレガントに行う方法はありますか?

ベストアンサー1

for ループを使用してリストを逆順に繰り返します。

for (int i = safePendingList.Count - 1; i >= 0; i--)
{
    // some code
    // safePendingList.RemoveAt(i);
}

例:

var list = new List<int>(Enumerable.Range(1, 10));
for (int i = list.Count - 1; i >= 0; i--)
{
    if (list[i] > 5)
        list.RemoveAt(i);
}
list.ForEach(i => Console.WriteLine(i));

あるいは、RemoveAll メソッドテストする述語:

safePendingList.RemoveAll(item => item.Value == someValue);

以下に、簡単な例を挙げて説明します。

var list = new List<int>(Enumerable.Range(1, 10));
Console.WriteLine("Before:");
list.ForEach(i => Console.WriteLine(i));
list.RemoveAll(i => i > 5);
Console.WriteLine("After:");
list.ForEach(i => Console.WriteLine(i));

おすすめ記事