2009-08-03 2 views
2

최근에 "컬렉션이 열거자를 인스턴스화 한 후에 수정되었습니다"라는 오류가 발생했으며 그 이유를 알 수 없습니다. 오류는 web.config를 지정합니다. 이 오류의 원인은 무엇입니까?"열거자가 인스턴스화 된 후 컬렉션이 수정되었습니다"라는 오류의 원인은 무엇입니까?

나는 그것을 재현하지 못했습니다. 오류가 아주 드물게 발생합니다. 내 프로그램은 파일을 받아서 처리합니다. 이 오류가 발생하면 프로그램을 다시 실행하기 만하면됩니다.

내 프로그램이 실행되는 동안 무언가가 내 web.config를 수정하고 있다고 생각합니까? 내 프로그램은 여러 데이터베이스 (sql, db2 및 oracle)에 연결하므로 시간이 지나면 완료되는 데 몇 초가 걸릴 수 있습니다. 그 시간 동안 web.config를 만지는 것이 원인이 될 수 있습니까? 아니면 잘못된 영역을보고 있습니까?

편집 : 나는 Web.config의에서 연결 문자열을 읽으려고 라인 (59)이 포함 된 경우가 있었 추적 스택을 보면

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 

: 여기

오류에 대한 몇 가지 추가 정보가 읽히고있는 연결 문자열 정보.

루프의 컬렉션을 수정하는 것이 계속 나타나는 것입니까?

컬렉션에 있지만 루프가 아닌 스택 추적을 표시하는 위치 근처에 항목을 추가합니다. 나는 수집 물에서 어떤 품목도 제거하지 않는다.

+0

그것은 일반적으로 당신이하는 컬렉션의 반복자를 설정하는 것을 의미하지만 당신이 내에서 컬렉션을 수정 :이 오류는 일반적으로이 같은 itterator의 내부 컬렉션을 수정 (언급 한 바와 같이 이전 버전)에서 중 발생 iterator, 그래서 무효화. 이전에 web.config 파일에서 그런 일이 발생하지 않았습니다. –

답변

10

컬렉션을 반복하면서 (예 : foreach) 컬렉션을 변경할 수 없습니다.

따라서 foreach 블록 내에있는 동안 컬렉션에서 항목을 추가하거나 제거하면이 오류가 발생합니다.

web.config의 오류로 다른 곳에 정의 된 중복 키를 추가하거나 코드에서 구성을 동적으로 변경하려고 할 수 있습니다.

+3

+ 대신 정수 인덱스를 사용하여 컬렉션을 거꾸로 반복합니다. 필요한 경우 삭제를 수행 할 수 있습니다. –

+0

이 오류가 config 파일과 관련이 있는지 의심 스럽습니다. foreach를 사용하여 처리중인 콜렉션을 살펴보고 문제를 찾을 수 있어야합니다. –

+0

이 경우 오류가 계속 발생하지 않습니까? 이 오류는 매우 드물게 발생하며 프로세스를 통해 동일한 파일을 실행할 때도 오류를 표시 할 수 없습니다. – dtc

1

web.config에 대한 참조는 자세한 오류를 허용하는 것일 수 있습니다. 표시된 지침을 따르면 오류가 발생한 페이지와 줄 번호가 표시됩니다.

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