Вот решение, которое я нашел в своем собственном коде после поиска этого вопроса, основываясь на ответе Хорхе.
DataTable RemoveRowsTable = ...;
int i=0;
//Remove All
while (i < RemoveRowsTable.Rows.Count)
{
DataRow currentRow = RemoveRowsTable.Rows[i];
if (currentRow.RowState != DataRowState.Deleted)
{
currentRow.Delete();
}
else
{
i++;
}
}
Таким образом, вы гарантируете, что все строки либо будут удалены, либо ихДля DataRowState установлено значение «Удалено».
Кроме того, вы не получите InvalidOperationException из-за изменения коллекции при перечислении, поскольку foreach
не используется.Однако ошибка в бесконечном цикле, к которой уязвимо решение Хорхе, здесь не является проблемой, поскольку код будет увеличиваться после DataRow, для которого DataRowState уже был установлен как Deleted.