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);
}