Для каждой ошибки цикла: коллекция была изменена; операция перечисления может не выполняться - PullRequest
0 голосов
/ 15 октября 2011

Я сталкиваюсь с ошибкой при циклическом просмотре данных.Я искал SO и пробовал решения, но не повезло.

Коллекция была изменена;операция перечисления может не выполняться.

    Dim dRow As DataRow
    For Each dRow In dt.Rows
        dt.Rows.Add(dRow("CustNum"), dRow("SalesRepName"), dRow("mgrid"), "=""" & dRow("midValue") & """", dRow("dba"), dRow("sysDate"), dRow("statusID"))
    Next  

Ошибка возникает при первом обращении к коду "Next"
Что будет вызывать изменение Коллекции;Операция перечисления может не выполняться. Как я могу устранить эту ошибку?

Ответы [ 2 ]

2 голосов
/ 15 октября 2011

Вы не можете перечислить коллекцию при ее обновлении.Даже если этот код действительно работает, он будет работать вечно, потому что вы продолжаете добавлять все больше и больше строк, и он будет продолжать перечислять их.

Вы можете немного изменить свой подход и сделать это, используя цикл for сСчетчик индекса и фиксированная верхняя граница.

Примерно так должно работать:

Dim rowCount As Integer = dt.Rows.Count  ' Set upper bound = original row count
Dim index as Integer
For index = 0 To rowCount - 1  ' Iterate through the original set of rows
    Dim dRow as DataRow = dt.Rows.Item(index)  ' Get row by index
    dt.Rows.Add(dRow("CustNum"), dRow("SalesRepName"), dRow("mgrid"), "=""" & dRow("midValue") & """", dRow("dba"), dRow("sysDate"), dRow("statusID"))
Next index
2 голосов
/ 15 октября 2011

Вы добавляете элементы в коллекцию, которую вы перечисляете.Логично, что это будет бесконечно.Такая ситуация не может возникнуть.Если вы действительно хотите это сделать, разделите их на две части, создав Structure или Class для ваших данных, добавив элементы в список, затем перебрав список и добавив элементы в таблицу.

...