0

データセット内の 1 つのデータテーブルを除いて、すべてのデータテーブルを削除したいと考えています。私はこれを試しました:-

        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。コレクションが繰り返される方法に関係しています。

いくつかの方法があります。1 つの方法は、ループ中に削除するテーブルを決定し、その後、戻ってそれらを削除することです。私は次のことがうまくいくと思います:

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 に答える