Я не использовал бы запрещенные соединения, начиная с того значительно увеличения сложность проблемы. Просто введите общее имя и адрес в список. Создайте копию списка и продолжайте переставлять его, пока адреса в каждом положении двух списков не будут соответствовать. Это гарантирует, что никто не вовлекает себя или их супруга.
В качестве награды, если Вы хотите сделать этот стиль тайного голосования, конверты печати из первого списка и имена из второго списка. Не посмотрите при наполнении конвертов. (Или Вы могли просто автоматизировать пользование электронной почтой всем их выбор.)
существует еще больше решений этой проблемы на этот поток .
Обычно это вызывает исключение.
Реализация 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
изменяется (увеличивается) при каждой операции, которая изменяет список.
Это полностью зависит от того, как реализован IEnumerable.
В случае списка он вызовет исключение IllegalOperationException. Но не полагайтесь на такое поведение IEnumarables. Некоторый цикл бесконечен и быстро вызовет исключение OutOfMemoryException.
Зависит от природы перечислителя. Многие из них генерируют исключение при изменении коллекции.
Например, List
выдает исключение InvalidOperationException
, если коллекция изменяется во время перечисления.