我想删除数据集中除一个之外的所有数据表。我试过这个: -
foreach (DataTable table in DtSet.Tables)
{
if (table.TableName != "tblAccounts")
{
DtSet.Tables.Remove(table);
}
}
但是我得到了
“集合已被修改;枚举操作可能无法执行。” 错误
答案 0 :(得分: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);
}
答案 1 :(得分: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);
}
答案 2 :(得分:1)
将它扔出去,因为它未经测试但没有循环。
var accounts = DtSet.Tables["tblAccounts"];
DtSet.Tables.Clear();
DtSet.Tables.Add(accounts);