J'ai ce code qui est exécuté chaque image d'un jeu: Cela me donne l'erreur suivante: p> la collection a été modifiée; L'opération d'énumération peut ne pas exécuter. p>
blockQuote> existe un moyen de modifier la valeur dans la paire de la valeur de la clé à l'intérieur de la boucle de Forache, sans copier le dictionnaire chaque image? P> P>
6 Réponses :
Désolé, vous ne pouvez pas. p>
Je suppose que votre meilleur pari est de créer un nouveau dictionnaire puis l'échange avec l'ancien lorsque vous avez terminé avec le foreach code> boucle. P>
Vous devez utiliser un autre modèle pour faire ce que vous essayez de faire parce que le pour chacun ne vous permet pas de changer l'énumérateur que vous bouclez. Imaginez si vous exécutez une liste de régime sur une liste triée depuis le début, vous commencez à traiter l'élément avec clé = "A" alors vous allez sur "B" alors vous modifiez "C" "B", qu'est-ce qui va se passer? Votre liste est remplacée et vous ne connaissez plus ce que vous êtes en boucle et où vous êtes. P>
en général, vous "pourrait" le faire avec A pour (int i = dictionary.Count-1; i> = 0; --i) ou quelque chose comme ça, mais cela dépend aussi de votre contexte, j'essaierais vraiment de Utilisez une autre approche. P>
Vous ne pouvez pas modifier une collection tout en l'énumérant à l'intérieur d'une déclaration code> code>. Donc, vous deviez devoir le copier à chaque fois (il vous suffit de copier les clés). Une autre option stockerait une liste de clés distincte à tout moment (par exemple, en encapsulant le dictionnaire dans une classe qui le gère). Quelque chose comme: bien sûr, dans un environnement simultané, vous devez vous assurer que le dictionnaire et la liste sont synchronisés ... p> p>
Une approche commune consiste à mémoriser les clés que vous souhaitez modifier dans la première boucle, puis à avoir une seconde qui boucle sur les touches mémorisées et change le dictionnaire d'origine. Qui évite de créer un dictionnaire complètement nouveau avec tous les éléments. P>
Non, vous ne pouvez pas. Il y a une option Nasty em> que vous pouvez utiliser: alors vous créeriez (disons) un dictionnaire Je ne fais pas pense que je recommanderais cependant - il serait gênant d'utiliser et facile à maluus em>. p> Une autre option si vous utilisez .NET 4 est à utiliser dictionnaire
concurrentdictionner code>
, qui fait em> permettre des modifications simultanées. P> p>
Je conseille de tenter de modifier une collection tout en boucle avec des dictionnaires, mais cela est possible car l'accès à clé directe est disponible. Il suffit d'ajouter Vous devez également modifier votre code de sorte que si la touche change vous supprimez une entrée de votre dictionnaire et ajoute le nouveau, car les clés ne peuvent vraiment pas être modifiées, simplement enlevées. < BR>
Encore une fois, cela n'est pas recommandé. P> p> .toarray () code> après le
conditionné.Keys code> dans le
foreach code>, les touches deviennent une collection séparée et vous pouvez modifier le dictionnaire: < Pré> xxx pré>
C'est génial! Merci tu as fait ma journée