使用 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不是集合的副本而不是参考吗?我不确定为什么会发生此错误或如何防止它。

使用 foreach 循环迭代时集合修改错误

您最好这样做来深度克隆您列出:

List<DBLog> currentLogEntries = new List<DBLog>(LogsViewer.DBLogEntries);