Когда объекты изменяются, в то время как быть перечисленным делает это влияет на перечисление?

Я не использовал бы запрещенные соединения, начиная с того значительно увеличения сложность проблемы. Просто введите общее имя и адрес в список. Создайте копию списка и продолжайте переставлять его, пока адреса в каждом положении двух списков не будут соответствовать. Это гарантирует, что никто не вовлекает себя или их супруга.

В качестве награды, если Вы хотите сделать этот стиль тайного голосования, конверты печати из первого списка и имена из второго списка. Не посмотрите при наполнении конвертов. (Или Вы могли просто автоматизировать пользование электронной почтой всем их выбор.)

существует еще больше решений этой проблемы на этот поток .

8
задан Jader Dias 11 July 2009 в 21:55
поделиться

3 ответа

Обычно это вызывает исключение. Реализация GetEnumerator () List предоставляет объект Enumerator , чей метод MoveNext () выглядит следующим образом (из Reflector):

public bool MoveNext()
{
    List<T> list = this.list;
    if ((this.version == list._version) && (this.index < list._size))
    {
        this.current = list._items[this.index];
        this.index++;
        return true;
    }
    return this.MoveNextRare();
}


private bool MoveNextRare()
{
    if (this.version != this.list._version)
    {
        ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_EnumFailedVersion);
    }
    this.index = this.list._size + 1;
    this.current = default(T);
    return false;
}

list._version изменяется (увеличивается) при каждой операции, которая изменяет список.

17
ответ дан 5 December 2019 в 06:54
поделиться

Это полностью зависит от того, как реализован IEnumerable.

В случае списка он вызовет исключение IllegalOperationException. Но не полагайтесь на такое поведение IEnumarables. Некоторый цикл бесконечен и быстро вызовет исключение OutOfMemoryException.

1
ответ дан 5 December 2019 в 06:54
поделиться

Зависит от природы перечислителя. Многие из них генерируют исключение при изменении коллекции.

Например, List выдает исключение InvalidOperationException , если коллекция изменяется во время перечисления.

5
ответ дан 5 December 2019 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: