C# Лучший способ удалить все данные, кроме одного

Я хочу удалить все наборы данных в наборе данных, кроме одного. Я пробовал это:-

        foreach (DataTable table in DtSet.Tables)
        {
            if (table.TableName != "tblAccounts")
            {
                DtSet.Tables.Remove(table);
            }
        }  

но я получаю

"Коллекция была изменена; операция перечисления может не выполняться." ошибка

,

3 ответа

Решение

Вы не можете изменить коллекцию во время перечисления. Но вы могли бы использовать for-loop:

for (int i = DtSet.Tables.Count - 1; i >= 0; i--)
{
    var table = DtSet.Tables[i];
    if (table.TableName != "tblAccounts")
        DtSet.Tables.Remove(table);
}

Просто выбрасываю это как непроверенное, но без петель.

var accounts = DtSet.Tables["tblAccounts"];
DtSet.Tables.Clear();
DtSet.Tables.Add(accounts);

Вы получите это каждый раз, когда пытаетесь изменить коллекцию во время foreach, Это связано с тем, как проходит коллекция.

Вы можете сделать это несколькими способами - один из них - определить таблицы, которые вы хотите удалить, пока находитесь в цикле, а затем вернуться и удалить их. Я думаю, что будет работать следующее:

var tablesToRemove = new List<DataTable>();
foreach (DataTable table in DtSet.Tables)
{
    if (table.TableName != "tblAccounts")
    {
        tablesToRemove.Add(table);
    }
}

foreach (DataTable table in tablesToRemove)
{
    DtSet.Tables.Remove(table);
}
Другие вопросы по тегам