最近我遇到了错误“在枚举器实例化后修改了集合”,我不明白为什么。该错误指定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行包含正在读取的连接字符串信息。
这是否仍然是由于在循环中修改集合?
我确实在集合中添加了项目,但没有在循环中添加项目,也没有显示堆栈跟踪所在的位置。我不会从馆藏中删除任何项目。
答案 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
}