ホームページ > バックエンド開発 > C++ > C#の反復中にリストから要素を安全に削除するにはどうすればよいですか?

C#の反復中にリストから要素を安全に削除するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-31 01:56:09
オリジナル
181 人が閲覧しました

How Can I Safely Remove Elements from a List During Iteration in C#?

反復中にC#リストから要素を効率的に削除します

標準的なメソッドを使用して反復しながらリストを変更すると、多くの場合、エラーが発生します。 この記事では、条件に基づいてAInvalidOperationExceptionから要素を安全に削除するためのクリーンなソリューションを紹介します。 List<T>

ループまたは標準

ループ内でList<T>.Remove()またはList<T>.RemoveAt()を使用すると、一般的な問題が発生します。 インデックスシフトは問題を引き起こします。foreach for

ソリューション1:逆繰り返し

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート