Я рассмотрел несколько вопросов SO, связанных с моим, а также с поиском в Google, и мне не удалось найти решение, которое работает для меня.
Учитывая список файлов, я пытаюсь отбросить все файлы, не относящиеся к cs, по причинам. Я беру строковый массив, преобразую в список и перебираю список, удаляя все ненужные файлы, используя list.Remove ().
После первого удаления выдает ошибку
Collection was modified; enumeration operation might not execute
Код:
string[] files = null;
try
{
files = System.IO.Directory.GetFiles(currentDir);
//Converting to list, to use list.Remove rather than rewriting entire array at each delete
var list = new List<string>(files);
foreach (string readFile in list)
{
if (Path.GetExtension(readFile) != ".cs") //|| Path.GetExtension(readFile) != ".dll")
{
//remove, as we don't currently care about non cs files.
list.Remove(readFile);
}
}
//Converting back to string array for use in the rest of the program
files = list.ToArray();
}
Я также пробовал RemoteAt (), который выдает ту же ошибку.
string[] files = null;
try
{
files = System.IO.Directory.GetFiles(currentDir);
//Converting to list, to use list.Remove rather than rewriting entire array at each delete
var list = new List<string>(files);
int i = 0;
for(int i=0; i<list.Count();i++)
{
if (Path.GetExtension(readFile) != ".cs") //|| Path.GetExtension(readFile) != ".dll")
{
//remove, as we don't currently care about non cs files.
list.RemoveAt(i);
}
i++;
}
//Converting back to string array for use in the rest of the program
files = list.ToArray();
}
Любые рекомендации по преодолению этой ошибки, так как в некоторых каталогах будет более 500 файлов, и я хочу максимально избегать перезаписи строкового массива.
Я прочитал следующие вопросы:
Как удалить элемент из списка в C #?
C # Коллекция ошибок была изменена; операция перечисления может не выполняться
Перечисления Foreach Loop C #
«List.Remove» в C # не удаляет элемент?
https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.remove?view=netframework-4.8
https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.removeat?view=netframework-4.8