를 사용하여 반복 할 때 나는이 내 응용 프로그램에서 다음과 같은 기능 :컬렉션 수정 오류, foreach 루프
// Method To Save Logs Buffer In Memory To DB
public void SaveLogsToDB()
{
// Proceed If There Is Any Logs In Buffer
if (LogsViewer.DBLogEntries.Count > 0)
{
// Init
string massInertStr = "INSERT INTO IC_Logs ([Date], [Time], [Type], [Entry], [Synced], [CreatedOn]) VALUES ";
// Build Mass Insert String
List<DBLog> currentLogEntries = LogsViewer.DBLogEntries;
foreach (DBLog myDBLog in currentLogEntries)
{
// Generate Insert Statement
massInertStr += String.Format("('{0}', '{1}', '{2}', '{3}', 0, GETDATE()),",
myDBLog.Date,
myDBLog.Time,
myDBLog.Type,
myDBLog.Entry.Replace("'", "''"));
}
massInertStr = massInertStr.Remove(massInertStr.Length - 1);
// Expect Errors
try
{
// Execute Mass Insert
MyDb.ExecuteNonQuery(massInertStr);
// Clear Logs Buffer
LogsViewer.DBLogEntries.RemoveAll(item => currentLogEntries.Contains(item));
}
catch { }
}
}
내 응용 프로그램이 실행될 때, 때때로 나는 다음과 같은 예외 얻을 때 :
컬렉션 수정되었습니다. 열거 연산이 실행되지 않을 수 있습니다.
오류는이 라인에서 발생 : foreach (DBLog myDBLog in currentLogEntries) { ... }
가 currentLogEntries
컬렉션이 아닌 참조의 복사본이 아닌가? 왜이 오류가 발생하는지 또는이를 막는 방법을 모르겠습니다.
윌이 도움이 같은 (필자는 foreach 루프를 실행하기 전에) :'DBLog [] currentLogEntries = 새 DBLog [LogsViewer.DBLogEntries.Count] LogsViewer.DBLogEntries.CopyTo (currentLogEntries); '? – Latheesan
'currentLogEntries가 참조가 아닌 콜렉션의 복사본이 아닌가? '아니요, 참조입니다. –
'currentLogEntries'는 사본이 아닙니다. 같은 참조 사본입니다. 콜렉션의 사본을 가져 오거나 동시 콜렉션을 사용해야합니다. 제안 된 사본이 도움이 될 것입니다. –