如何重写此Visual Basic.net循环以使其工作?

时间:2012-05-01 21:01:55

标签: vb.net loops

我有一个用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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您不需要使用

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

因为您已经有drAcademicRecord,所以您可以通过

直接删除该行
drAcademicRecord.Delete

e.g。

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