Проблема заключается в использовании GetRange
:
Этот метод не создает копии элементов.Новый ArrayList - это только окно просмотра исходного ArrayList.Однако все последующие изменения в исходном ArrayList должны быть сделаны через это окно просмотра ArrayList.Если изменения вносятся непосредственно в исходный ArrayList, окно представления ArrayList становится недействительным, и любые операции над ним возвращают исключение InvalidOperationException.
Вы создаете два представления для исходного ArrayList
и пытаетесьработать с ними обоими - но когда одно представление изменяет базовый список, другое представление фактически становится недействительным.
Если вы измените код для создания копий подсписков - или если вы работаетенепосредственно с исходным списком в указанных пределах - тогда я считаю, что он будет работать нормально.
(Как отмечалось в комментариях, я бы также настоятельно рекомендовал использовать общие коллекции.)
Вот короткая, но полная программа, которая демонстрирует проблему, с которой вы столкнулись:
using System;
using System.Collections;
class Program
{
static void Main()
{
ArrayList list = new ArrayList();
list.Add("a");
list.Add("b");
ArrayList view1 = list.GetRange(0, 1);
ArrayList view2 = list.GetRange(1, 1);
view1[0] = "c";
Console.WriteLine(view2[0]); // Throws an exception
}
}