Удалить элементы из списка, проверив условия, может быть сложно. Если вы не используете изящный оператор LINQ (так как вы используете ArrayList, я собираюсь предположить, что LINQ вам недоступен), вам нужно будет использовать обратную итерацию.
Если вы перебираете список вроде этого:
foreach(object o in ArrayList)
{
}
Или
for(int i = 0; i < myArray.Count; i++)
{
}
У вас возникнут проблемы с удалением элементов, потому что у вас закончились элементы (поскольку список теперь меньше, чем когда вы определили свой for / foreach).
Вам необходимо использовать обратную итерацию или сохранить список элементов для последующего удаления.
Пример 1: обратная итерация
for(int i = myArray.Count - 1; i >= 0; i--)
{
object o = myArray[i];
if (<some condition here>)
myArray.Remove(i);
}
Пример 2: Список удаления *
ArrayList toRemove = new ArrayList();
foreach(object o in myArray)
{
if(<some condition here>)
toRemove.Add(o);
}
foreach(object o in toRemove)
myarray.Remove(o);
Пример 3: Подход LINQ
var cleanEntities = myArray.Where(x => <some condition on x, which is your item>);