È cannot use a foreach
to remove items durante l'enumerazione, che stai ricevendo un'eccezione in fase di esecuzione.
Si potrebbe utilizzare List.RemoveAll
:
list.RemoveAll(x => x.Number == 1);
o, se si tratta di realtà non un List<T>
ma qualsiasi sequenza, LINQ:
list = list.Where(x => x.Number != 1).ToList();
Se si è certi che non v'è un solo elemento con quel numero o si desidera rimuovere un elemento al massimo è possibile utilizzare l'approccio ciclo for suggerito nell'altra risposta o questa:
var item = list.FirstOrDefault(x => x.Number == 1);
if(item ! = null) list.Remove(item);
Il collegamento all'altra domanda che ho pubblicato suggerisce che è possibile modificare una raccolta durante l'enumerazione in C# 4 e successive. No, non puoi. That applies only to the new concurrent collections.
fonte
2014-11-28 20:17:19
Quindi, il codice non funziona o cosa? –
Contrariamente a quanto si sostiene, il codice corrente non coinvolge affatto LINQ. Avete motivi specifici per volere/avere bisogno di una soluzione basata su LINQ? Oppure sarebbe accettabile qualsiasi altra soluzione efficiente? – stakx
@VsevolodGoloviznin: Il codice sopra riportato non può funzionare, perché contiene errori di sintassi - 'list.remove (someobject)'. – stakx