вас cannot use a foreach
to remove items при перечислении, вы получаете исключение во время выполнения.
Вы можете использовать List.RemoveAll
:
list.RemoveAll(x => x.Number == 1);
или, если это на самом деле не List<T>
но любая последовательность, LINQ:
list = list.Where(x => x.Number != 1).ToList();
Если вы уверены, что есть только один элемент с этим номером или вы хотите удалить один элемент в максимуме, вы можете использовать подход для петли, предложенный в другом ответе или этом:
var item = list.FirstOrDefault(x => x.Number == 1);
if(item ! = null) list.Remove(item);
Ссылка на другой вопрос, который я опубликовал, предполагает, что вы можете изменить коллекцию во время перечисления в C# 4 и более поздних версиях. Нет, ты не можешь. That applies only to the new concurrent collections.
Итак, вы код не работает или что? –
Вопреки тому, что вы утверждаете, ваш текущий код вообще не связан с LINQ. У вас есть конкретные причины для желания/необходимости решения на основе LINQ? Или может быть приемлемо любое другое эффективное решение? – stakx
@VsevolodGoloviznin: приведенный выше код не может работать, потому что он содержит синтаксические ошибки - 'list.remove (someobject)'. – stakx