2009-08-03 47 views
2

最近我遇到了錯誤「集合在枚舉器實例化後被修改」,我不知道爲什麼。該錯誤指定了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

這通常意味着你建立一個集合的迭代器,但你從內修改集合:此錯誤通常無論是從(前面提到)修改這樣的itterator內收集引起迭代器,從而使其失效。我之前沒有在我的web.config文件中遇到過這樣的事情。 – 2009-08-03 19:36:42

回答

10

在迭代它時(即在foreach中),您無法更改集合。

因此,在foreach塊中添加或刪除集合中的項目將導致此錯誤。

作爲web.config中的錯誤,可能是您添加了在其他位置定義的重複密鑰,或者您試圖在代碼中動態更改配置。

+3

+而是使用整數索引向後遍歷集合。這將允許您在必要時進行刪除。 – 2009-08-03 19:47:17

1

對web.config的引用可能會啓用詳細錯誤。如果按照顯示的說明進行操作,它會顯示錯誤發生地點的頁碼和行號。

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