0

我有一个用 Visual Basic 编写的 For Each 循环,它试图修改它正在迭代的表。这导致“”集合被修改;枚举操作可能无法执行”异常。

令人沮丧的是,我试图复制我正在使用的所有对象,并且只从副本中删除,但异常仍然发生。

我知道这是由于我使用了 For Each 循环而不是 For 或 While 循环,但我无法重写我的代码并使其工作(我更熟悉 C#)。这就是我决定在这里寻求帮助的原因。

这是我的代码。我如何重写才能删除我希望删除的行?任何帮助和代码将不胜感激!

Dim drAcademicRecord, drSchool As DataRow
For Each drSchool In dsR.Tables("School").Rows
    If drSchool("OrganizationName") = "NA" Then
        For Each drAcademicRecord In dsR.Tables("AcademicRecord").Rows
            If drAcademicRecord("AcademicRecord_Id") = drSchool("AcademicRecord_Id") Then
                dsR.Tables("AcademicRecord").Rows.Remove(drAcademicRecord)  '<-- This is the line causing my exception
            End If
        Next
    End If
Next
4

2 回答 2

3
For i as integer = dsR.Tables("AcademicRecord").Rows.Count - 1 to 0 Step -1
    If dsR.Tables("AcademicRecord").Rows(i)("AcademicRecord_Id") = drSchool("AcademicRecord_Id") Then
        dsR.Tables("AcademicRecord").Rows.RemoveAt(i)
    End If
Next
于 2012-05-01T21:16:17.993 回答
1

你不需要使用

dsR.Tables("AcademicRecord").Rows.Remove(drAcademicRecord)

因为你已经有了 drAcademicRecord,所以你可以直接删除那一行

drAcademicRecord.Delete

例如

For Each drSchool As DataRow In dsR.Tables("School").Select("OrganizationName='NA'")
    For Each drAcademicRecord As DataRow In dsR.Tables("AcademicRecord").Select("AcademicRecord_Id=" & drSchool("AcademicRecord_Id"))
        drAcademicRecord.Delete
    Next
Next
于 2012-05-02T00:09:55.863 回答