Quelle est la meilleure façon de modifier une liste dans un "foreach" en boucle?

Une nouvelle fonctionnalité de C# /.NET 4.0 est que vous pouvez changer votre énumérables dans un foreach sans exception. Paul Jackson entrée de blog de Un Intéressant Effet de bord de la Concurrence: la Suppression d'Éléments d'une Collection lors de l'Énumération pour plus d'informations sur ce changement.

Quelle est la meilleure façon de faire les choses suivantes?

foreach(var item in Enumerable)
{
    foreach(var item2 in item.Enumerable)
    {
        item.Add(new item2)
    }
}

Habituellement j'utilise un IList comme un cache/tampon jusqu'à la fin de la foreach, mais est-il meilleure façon de faire?

  • Hmm.. Pouvez-vous nous indiquer à la documentation de ce changement? Enumerables ont toujours été immuable lorsque l'énumération sur la collection.
  • C'est une variation sur le thème qui l'a poussé Steve McConnell conseiller ne jamais singe avec l'indice de boucle.
  • Changer sur .NET 4.0 lovethedot.net/2009/03/...
  • Merci pour le lien! Mais, je me demande, ont été vous demandez comment faire cela avec ou sans cette nouvelle fonctionnalité? Je devine que sans, puisque vous avez accepté ma réponse, mais je suis un peu confus.
  • Je sais que je suis en train de déterrer un très vieux conversation ici, mais je serais extrêmement prudent avec cela. Seule la nouvelle concurrente collections sont modifiables dans foreach - tous les précédents types de collection, et j'imagine que la majorité des futurs types de collection trop, sera toujours immuable, tandis que l'énumération sur eux. Faisant un usage intensif de ce caprice serait un moyen efficace de vous enfermer dans l'utilisation simultanée de collections, parce que si vous souhaitez utiliser un autre collection à l'avenir tous vos excentrique boucles foreach allait se briser.
  • Double Possible de C# - Ne faites pas le singe avec l'indice de boucle
  • C'est cette question en demandant spécifiquement sur le simultanées collections? Ou est-il en posant une question plus générale et de mentionner que seulement pour le contraste?
  • Le lien en question n'est plus valide. Est-t-il un jour?

InformationsquelleAutor Polo | 2009-04-17