使用 foreach 循环迭代时集合修改错误
本文关键字:集合 修改 错误 迭代 foreach 循环 使用 | 更新日期: 2023-09-27 18:36:11
>我的应用程序中有以下函数:
// 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
不是集合的副本而不是参考吗?我不确定为什么会发生此错误或如何防止它。
您最好这样做来深度克隆您列出:
List<DBLog> currentLogEntries = new List<DBLog>(LogsViewer.DBLogEntries);