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