反復中にC#リストから要素を効率的に削除します
標準的なメソッドを使用して反復しながらリストを変更すると、多くの場合、エラーが発生します。 この記事では、条件に基づいてAInvalidOperationException
から要素を安全に削除するためのクリーンなソリューションを紹介します。
List<T>
ループ内でList<T>.Remove()
またはList<T>.RemoveAt()
を使用すると、一般的な問題が発生します。 インデックスシフトは問題を引き起こします。foreach
for
a
ループを使用して逆方向に繰り返し、インデックスの問題を回避します:
for
<code class="language-csharp">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));</code>
ソリューション2:
方法
RemoveAll()
より簡潔で読みやすいアプローチは、述語を使用してメソッドを使用することです。
これにより、与えられた条件を満たすすべての要素がエレガントに削除されます(この場合はRemoveAll()
)。 一般に、その明確さと効率性が好まれています。
<code class="language-csharp">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));</code>
メソッドは、そのシンプルさと読みやすさのための好ましい選択です。
以上がC#の反復中にリストから要素を安全に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。