0

我想删除一个数据集中的所有数据表。我试过这个: -

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

但我得到一个

“集合已修改;枚举操作可能无法执行。” 错误

.

4

3 回答 3

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);
}
于 2013-01-14T22:49:49.473 回答
2

只是把它扔在那里,因为它未经测试但没有循环。

var accounts = DtSet.Tables["tblAccounts"];
DtSet.Tables.Clear();
DtSet.Tables.Add(accounts);
于 2013-01-14T23:03:17.900 回答
1

每当您尝试在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);
}
于 2013-01-14T22:50:03.810 回答