Могу ли я безопасно изменить элементы коллекции VB, перебирая ее (используя For Each)? - PullRequest
2 голосов
/ 13 сентября 2011

Могу ли я безопасно изменить -Я имею в виду: удалить и повторно добавить в другую позицию индекса - любой элемент, который я перебираю, используя цикл For Each в VB? Речь идет о классе VB Microsoft.VisualBasic.Collection.

И если да: то ли это из-за замысла или детали реализации, на котором я тогда основываюсь?

Возможно, мне лень искать достаточно усердно, но докс, похоже, ничего об этом не говорит.

Ответы [ 3 ]

2 голосов
/ 13 сентября 2011

Вы не можете изменять коллекцию, пока выполняете ее, как вы описываете;то есть вы не можете удалить элемент без получения исключения, такого как «коллекция была изменена».

Это не значит, что вы не можете изменять элементы вообще (сделайте что-то кроме добавления / удаления).

Если вы столкнулись с этой ошибкой, попробуйте рефакторинг вашего кода, например, используя цикл for (часто наоборот, чтобы избежать смещения счетчика индекса).

2 голосов
/ 13 сентября 2011

IEnumerator<T> spec говорит, что вы не можете:

Перечислитель остается действительным до тех пор, пока коллекция остается неизменной. Если в коллекцию вносятся изменения, такие как добавление, изменение или удаление элементов, перечислитель безвозвратно аннулируется и его поведение не определено.

Некоторые коллекции могут не соответствовать этому правилу.

0 голосов
/ 13 сентября 2011

Нет, ты не можешь. Скорее сделайте копию коллекции, чтобы отредактировать и использовать копию впоследствии.

...