Maison >développement back-end >C++ >Comment puis-je supprimer en toute sécurité les éléments d'une liste pendant l'itération en C #?

Comment puis-je supprimer en toute sécurité les éléments d'une liste pendant l'itération en C #?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-31 01:56:09184parcourir

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

Retirer efficacement les éléments d'une liste C # pendant l'itération

Modification d'une liste tout en itérant à travers lui en utilisant des méthodes standard conduit souvent à InvalidOperationException des erreurs. Cet article présente des solutions propres pour supprimer en toute sécurité les éléments d'un List<T> basé sur une condition.

Le problème commun survient lors de l'utilisation de List<T>.Remove() ou List<T>.RemoveAt() dans une boucle foreach ou d'une boucle standard for. Index le changement provoque des problèmes.

Solution 1: itération inverse

itérer en arrière à l'aide d'une boucle for Évite les problèmes d'index:

<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>

Cette méthode commence à partir de la fin, en supprimant les éléments sans affecter les indices suivants.

Solution 2: RemoveAll() Méthode

Une approche plus concise et lisible utilise la méthode RemoveAll() avec un prédicat:

<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>

Cela supprime élégamment tous les éléments satisfaisant la condition donnée (i > 5 dans ce cas). Il est généralement préféré pour sa clarté et son efficacité.

Les deux méthodes fournissent des moyens fiables de supprimer les éléments d'une liste pendant l'itération, en empêchant les exceptions et en garantissant l'intégrité des données. La méthode RemoveAll() est souvent le choix préféré pour sa simplicité et sa lisibilité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn