Maison > développement back-end > C++ > Comment ajouter en toute sécurité des éléments à une liste tout en itérant avec une boucle foreach en C #?

Comment ajouter en toute sécurité des éléments à une liste tout en itérant avec une boucle foreach en C #?

Susan Sarandon
Libérer: 2025-01-27 13:31:12
original
427 Les gens l'ont consulté

How to Safely Add Items to a List While Iterating with a Foreach Loop in C#?

Modifier la liste à l'intérieur de la boucle foreach en C#

Dans les versions de C# antérieures à 4.0, essayer de modifier une liste à l'intérieur d'une boucle foreach entraînait une exception. Toutefois, dans .NET 4.0, cette limitation est levée.

Question :

Étant donné le code suivant, quelle est la meilleure façon d'ajouter un élément à une liste d'éléments tout en utilisant une boucle foreach pour parcourir son Enumerable imbriqué ?

<code class="language-csharp">foreach (var item in Enumerable)
{
    foreach (var item2 in item.Enumerable)
    {
        item.Add(new item2); // 这行代码有问题
    }
}</code>
Copier après la connexion

Bonnes pratiques :

Les collections utilisées dans les boucles foreach sont immuables de par leur conception. Il ne peut donc pas être modifié directement lors de l’itération. Pour modifier la liste en toute sécurité, il est recommandé d’utiliser plutôt une boucle for traditionnelle.

Explication :

La documentation MSDN indique que l'instruction foreach est utilisée pour parcourir une collection. Bien qu'il n'ajoute ou ne supprime pas implicitement des éléments de la collection source, il met également en garde contre le recours à ce comportement en raison d'effets secondaires potentiels. Si vous devez modifier la collection source, l'approche recommandée consiste à utiliser une boucle for.

Exception de collecte simultanée :

Le billet de blog de Paul Jackson référencé dans la question indique que dans les collections simultanées C#, il est autorisé de modifier la collection dans une boucle foreach. Cette exception vient du fait que les collections simultanées sont thread-safe et gèrent différemment les effets secondaires potentiels. Cette règle ne s’applique donc pas aux collections concurrentes. Pour les collectes normales, il est toujours recommandé d'utiliser des boucles for pour éviter d'éventuels problèmes.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal