You cannot use a foreach
to remove items podczas wyliczenia, otrzymujesz wyjątek w czasie wykonywania.
Można użyć List.RemoveAll
:
list.RemoveAll(x => x.Number == 1);
lub, jeśli to faktycznie nie List<T>
ale każda sekwencja, LINQ:
list = list.Where(x => x.Number != 1).ToList();
Jeżeli jesteś pewien, że istnieje tylko jeden element z tej liczby lub chcesz usunąć jedną pozycję na maksimum, możesz użyć metody pętli for sugerowanej w innej odpowiedzi lub następującej:
var item = list.FirstOrDefault(x => x.Number == 1);
if(item ! = null) list.Remove(item);
Link do innego opublikowanego przeze mnie pytania sugeruje, że można modyfikować kolekcję podczas wyliczenia w C# 4 i późniejszych. Nie, nie możesz. That applies only to the new concurrent collections.
Twój kod nie działa, a co? –
W przeciwieństwie do tego, co żądasz, twój obecny kod w ogóle nie zawiera LINQ. Czy masz konkretne powody, dla których potrzebujesz/potrzebujesz rozwiązania opartego na LINQ? Czy też inne skuteczne rozwiązanie byłoby do przyjęcia? – stakx
@VsevolodGoloviznin: Powyższy kod nie może działać, ponieważ zawiera błędy składni - 'list.remove (someobject)'. – stakx