Исключение во время итерации по коллекции и удаления элементов из этой коллекции [дубликаты]
На этот вопрос уже есть ответ:
Каков наилучший способ изменить список в цикле «foreach»? 11 ответовЯ удаляю элемент из ArrayList в цикле foreach и получаю следующее исключение.
Collection была изменена; операция перечисления может не выполняться.
Как я могу удалить элементы в foreach,
РЕДАКТИРОВАТЬ Может быть один элемент для удаления или два или все.
Следующий мой код:
/*
* Need to remove all items from 'attachementsFielPath' which does not exist in names array.
*/
try
{
string attachmentFileNames = txtAttachment.Text.Trim(); // Textbox having file names.
string[] names = attachmentFileNames.Split(new char[] { ';' });
int index = 0;
// attachmentsFilePath is ArrayList holding full path of fiels user selected at any time.
foreach (var fullFilePath in attachmentsFilePath)
{
bool isNeedToRemove = true;
// Extract filename from full path.
string fileName = fullFilePath.ToString().Substring(fullFilePath.ToString().LastIndexOf('\\') + 1);
for (int i = 0; i < names.Length; i++)
{
// If filename found in array then no need to check remaining items.
if (fileName.Equals(names[i].Trim()))
{
isNeedToRemove = false;
break;
}
}
// If file not found in names array, remove it.
if (isNeedToRemove)
{
attachmentsFilePath.RemoveAt(index);
isNeedToRemove = true;
}
index++;
}
}
catch (Exception ex)
{
throw ex;
}
EDIT: Можете ли вы также совет по коду. Нужно ли разбивать его на небольшие методы, обработку исключений и т. Д.
Недопустимый аргумент исключение при создании общего списка из ArrayList
foreach (var fullFilePath in new List<string>(attachmentsFilePath))
{
alt text http://img641.imageshack.us/img641/1628/invalidargument1.pn
Когда я используюList<ArrayList>
Исключением является аргумент '1': невозможно преобразовать из 'System.Collections.ArrayList' в 'int'
attachmentsFilePath объявлен так
ArrayList attachmentsFilePath = new ArrayList();
Но когда я это так объявил, проблема решилась
List<ArrayList> attachmentsFilePath = new List<ArrayList>();