Modifier la liste dans la boucle foreach
J'ai une construction similaire à ceci (mais un beaucoup plus compliqué):
var list = new List<string>();
//.. populate list ..
foreach(var item in list)
{
DoFunction(list);
}
public void DoFunction(List<string> list)
{
if(someCondition == true)
{
//.. modify list in here ..
}
}
Maintenant, je comprends que ce n'est pas possible de modifier la collection vous êtes foreaching à travers, mais comment voulez-vous sortir d'une boucle normalement si vous n'avez pas à modifier la liste (sans try catch
déclaration)? Est-il possible de dire si la liste a été éditée? Vous pouvez modifier la liste et rapidement break;
avant d'avis?
source d'informationauteur Entity
Vous devez vous connecter pour publier un commentaire.
Plutôt que d'utiliser un
foreach
construire, unefor
boucle vous permettra de modifier la liste.Oui, vous pourriez casser, si c'est ce que vous voulez vraiment. Une exception ne sera pas jeté jusqu'à ce que le
for
boucle essaie de récupérer l'élément suivant de la liste.Mais j'ai trouvé que c'est plus facile de créer et d'itérer à travers une copie de la liste de sorte que vous n'avez pas à vous inquiéter à ce sujet.
L'ajout des performances d'un supplément, intacte liste est généralement négligeable par rapport à la maintenabilité des coûts de code plus complexe.
Il est difficile d'offrir des conseils utiles, sans savoir quels types de modifications sont apportées. Le modèle que j'ai trouvé est a les plus polyvalents de la valeur, même si, à juste à construire une nouvelle liste.
Par exemple, si vous avez besoin de regarder chaque élément et de décider entre les retirer, laissant comme ça, ou de l'insertion d'éléments après cela, vous pouvez utiliser un modèle comme ceci: