Как исправить ошибку 'Collection Modified'

        static void Main(string[] args)
        {
            using (FileStream zipToOpen = new FileStream(@"...", FileMode.Open))
                {
                    using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
                    {
                        foreach (var item in archive.Entries)
                        {
                            if (item.Name != "video.mp4")
                            {
                                Console.WriteLine(item.Name);
                                item.Delete();
                            }

                        }

                    }

                }
            }

Я хочу чтобы из zip файла удалились все файлы, которые не является 'video.mp4', но я получаю ошибку 'Collection was modified; enumeration operation may not execute'


Ответы (1 шт):

Автор решения: aepot

Можно так, по-простому

for (int i = 0; i < archive.Entries.Count; i++)
{
    var item = archive.Entries[i];
    if (item.Name != "video.mp4")
    {
        Console.WriteLine(item.Name);
        item.Delete();
        i--;
    }
}

Или с помощью Linq на основе примера от @tym32167

archive.Entries
    .Where(item => item.Name != "video.mp4")
    .ToList()
    .ForEach(item =>
    {
        Console.WriteLine(item.Name);
        item.Delete();
    });
→ Ссылка