导致错误的原因是“枚举器实例化后收集被修改了”?

时间:2009-08-03 19:33:29

标签: .net asp.net web-config

最近我遇到了错误“在枚举器实例化后修改了集合”,我不明白为什么。该错误指定web.config。是什么导致了这个错误?

我无法重现它。错误弹出很少和随机。我的程序接收一个文件并对其进行处理。当我收到此错误时,我只需重新运行该程序即可。

我正在考虑在我的程序运行时修改我的web.config?我的程序确实连接到几个数据库(sql,db2和oracle),因此有时可能需要几秒钟才能完成。在那段时间内触摸web.config的东西可能是原因还是我在看错了区域?

编辑:

以下是有关错误的一些其他信息:

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

查看堆栈跟踪时,我尝试从web.config中读取连接字符串,第59行包含正在读取的连接字符串信息。

这是否仍然是由于在循环中修改集合?

我确实在集合中添加了项目,但没有在循环中添加项目,也没有显示堆栈跟踪所在的位置。我不会从馆藏中删除任何项目。

2 个答案:

答案 0 :(得分:10)

在迭代时(即在foreach中),您无法更改集合。

因此,在foreach块中添加或删除集合中的项目将导致此错误。

作为web.config中的错误,可能是您要添加在别处定义的重复键,或者您尝试在代码中动态更改配置。

答案 1 :(得分:1)

对web.config的引用可能是为了启用详细错误。如果您按照显示的说明操作,它将显示错误发生的页面和行号。此错误通常是由(如前所述)修改itterator内部的集合引起的,如下所示:

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