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