2009-08-03 6 views
2

Récemment, j'ai rencontré l'erreur "Collection a été modifiée après l'instanciation de l'énumérateur" et je ne sais pas pourquoi. L'erreur spécifie le fichier web.config. Qu'est-ce qui cause cette erreur?Qu'est-ce qui provoque l'erreur "La collection a été modifiée après l'instanciation de l'énumérateur"?

Je n'ai pas été capable de le reproduire. L'erreur apparaît très rarement et au hasard. Mon programme prend un fichier et le traite. Quand je reçois cette erreur, je réexécute simplement le programme et ça va.

Je pense que quelque chose est en train de modifier mon web.config pendant que mon programme est en cours d'exécution? Mon programme se connecte à plusieurs bases de données (sql, db2 et oracle), parfois cela peut prendre plusieurs secondes. Est-ce que quelque chose touchant le web.config pendant ce temps peut être la cause ou est-ce que je regarde la mauvaise zone?

Edit:

Voici quelques informations supplémentaires sur l'erreur:

Type : System.Configuration.ConfigurationErrorsException, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 
Message : An error occurred loading a configuration file: Collection was modified after the enumerator was instantiated. (<path>\web.config line 59) 
Source : System.Configuration 
Help link : 
BareMessage : An error occurred loading a configuration file: Collection was modified after the enumerator was instantiated. 
Filename : <path>\web.config 
Line : 59 
Errors : System.Configuration.ConfigurationException[] 
Data : System.Collections.ListDictionaryInternal 

regardant la pile trace il est arrivé quand j'ai essayé de lire une chaîne de connexion de la ligne 59 et web.config contient les informations de chaîne de connexion en cours de lecture.

Cela ressemble-t-il toujours à la modification d'une collection dans une boucle?

J'ajoute des éléments à une collection mais pas dans une boucle et nulle part près de l'endroit où la trace de la pile est affichée. Je ne retire aucun élément des collections.

+0

Cela signifie généralement que vous configurez un itérateur sur une collection, mais vous modifiez la collection à l'intérieur du itérateur, l'invalidant ainsi. Je n'ai jamais rencontré une telle chose dans mon fichier web.config auparavant. –

Répondre

10

Vous ne pouvez pas modifier une collection en l'itérant (c'est-à-dire dans un foreach). Ainsi, l'ajout ou la suppression d'éléments d'une collection dans le bloc foreach provoquera cette erreur. En tant qu'erreur dans web.config, il se peut que vous ajoutiez une clé dupliquée définie ailleurs ou que vous essayiez de modifier la config dynamiquement dans votre code.

+3

+ Parcourez à la place la collection en utilisant un index entier. Cela vous permettra de faire des suppressions si nécessaire. –

+0

Je doute que cette erreur a quelque chose à voir avec le fichier de configuration. Regardez les collections que vous traitez avec une foreach et vous devriez être capable de trouver le problème. –

+0

Si tel est le cas, l'erreur ne se produirait-elle pas systématiquement? Cette erreur se produit très rarement et je dois encore être en mesure de faire apparaître l'erreur même lorsque je cours exactement le même fichier à travers le processus. – dtc

1

La référence à web.config est probablement de permettre des erreurs détaillées. Si vous suivez les instructions affichées, il vous montrera la page et le numéro de ligne où l'erreur s'est produite. Cette erreur est souvent causée soit par (comme mentionné précédemment) la modification de la collection à l'intérieur d'un itterator comme celui-ci:

List<string> myList = new List<string>(); 
myList.Add(some strings); 
foreach(string s in myList){ 
    myList.Remove(s); // <-- EXCEPTION 
} 
Questions connexes