2017-02-16 3 views
-1

У меня есть список, который передается в цикл foreach, который удаляет 0 или более элементов из списка. Исходя из условий, возможно, что список будет полностью опустошен, что приведет к ошибке нулевой ссылки. Каков наилучший способ справиться с такой ситуацией?объект, опустошенный в цикле foreach

foreach (Item i in items) 
{ 
    if (i.property == condition) 
    { 
     items.Remove(i); 
    } 
} 
+0

Вы не можете изменить последовательность, вы перечисляете. Как вам удалось полностью удалить список предметов? –

+0

Я не могу придумать ни одного языка, который я знаю, который работает правильно, когда вы пытаетесь удалить элементы из чего-то, что вы повторяете. Существует много способов сделать это, начиная с 'items.RemoveAll', до клонирования списка, итерации по одному и удаления из другого, для хранения индексов и удаления элементов после цикла. – Andrew

ответ

1

Используйте List.RemoveAll метод

items.RemoveAll(i => i.property == condition) 

Она удаляет все элементы, которые соответствуют условиям, определенным указанным предиката.

Вы также можете оставить первоначальный список (или другую коллекцию) нетронутого путем создания нового списка без предметов, которые условие соответствия (иногда это может быть полезно)

var newItems = items.Where(i => i.property != condition).ToList(); 
Смежные вопросы